2009-06-15 26 views
0

関数を宣言して定義して、単一の関数からしかアクセスできないようにするにはどうすればよいですか?別の関数で関数を宣言できます。しかし、ローカル関数定義は(Visual C++によると)違法なので、グローバルスコープで関数を定義しなければならず、他の関数がそれを呼び出すことが可能になります。他の関数からしかアクセスできない関数を作成する

void f1() { 
    void f1_private(); 
    f1priv(); 
} 

void f1_private() { 
} 

void f2() { 
    f1_private(); // Legal 
} 

f1_privateをf1からのみアクセスできるようにすることはできますか?そうでない場合、ローカルで宣言された関数の用途は何ですか?

答えて

8

両方の機能を1つの別々のファイルに入れて、目立たないようにすることができますstatic。 Cの静的関数は、それが宣言されたのと同じソースファイル(貧しい人の名前空間概念のようなもの)からのみアクセスできます。

通常のように、目に見える機能をヘッダファイルに公開するだけです。

+0

これはおそらくあなたが手に入れるほど近いかもしれませんが、そのファイルに多くの機能を追加することはできません。それをコンパイルして、静的にライブラリとしてリンクさせるように強制されていない限り。 – patros

+1

それはCです。これはあなたが好きなことを強制することができる束縛と規律の言葉から得ることができるほど遠くにあります。 – Joey

3

しかし、あなたは、C++で記述したクラス内のメソッドを宣言し、メソッドをプライベートに、ファーストクラスの別のクラスの友人を作ることができます。

8

あなたができることは、自分のファイルに2つの関数を入れて静的なリンケージを持つように宣言することです(宣言の先頭に 'static'を付けます)。静的なリンケージを持つ関数は、コンパイル単位(通常はほとんどのビルドシステムで同じファイルを意味します)でのみアクセスできます。

非公開関数を別の場所から呼び出す必要がある場合は、呼び出し元の各ファイルにプロトタイプを書き込むか、各ファイルに含まれるプロトタイプを含むヘッダーファイルを作成する必要がありますから呼ばれた。

0

//あなたの.cファイルの一番下に

static void foo() 
{ 
} 

void dude() 
{ 
    // foo only accessible here, unless you have forward 
    // declared it higher up in the file 
    foo(); 
} 

しかし、静的メソッドは、関数ポインタを通じてファイルの範囲外で呼び出すことができることに注意してください。

0

コメントを追加してください。

//For use only by foo. 

誰かがそれを使用することについては本当にGUNG-HOをされた場合、彼らはあなたの最善の努力にもかかわらず、道を見つけるでしょう。たとえコードをコピーして貼り付けたり、コードをリファクタリングするだけであっても。一番良いことは、そうしてはならないことを知らせることです。

クラスに含まれている場合は、非公開にしてカプセル化することもできます。そうでない場合は静的です。

+0

C言語で私的な関数やクラスのようなものはありません –

+0

彼はVisual C++コンパイラを使用しています。 – patros

0

1つの関数のパブリックメンバーと、他の関数からのみアクセス可能なプライベートメンバー関数を使用して、別のクラスを宣言することができます。これがクラス内でのみ使用される場合、内部クラスにすることができます。

関連する問題