は私が宣言静的関数の利点は何ですか?
static int *foo();
ので、それはintへのポインタを返す静的な関数としてのfooを宣言belowsの見てきた1つのプロジェクトのソースコードに参照してください。ここで私はあなたに静的な関数宣言の目的は何ですか?
は私が宣言静的関数の利点は何ですか?
static int *foo();
ので、それはintへのポインタを返す静的な関数としてのfooを宣言belowsの見てきた1つのプロジェクトのソースコードに参照してください。ここで私はあなたに静的な関数宣言の目的は何ですか?
関数の名前は、宣言されている翻訳単位(ソースファイル)の外側には表示されず、別のソースファイル内の別の関数foo
と競合しません。
一般に、別のソースファイルから特定の呼び出しが必要な場合を除いて、関数はおそらくstatic
と宣言されます。
(が表示されていないだけで名だということに注意してください。それはまだポインタを経由してプログラムのどこからでも呼び出すことができます。)
他の翻訳単位(.cファイル)がその機能を認識しないようにします。物事をきれいに整えます。 static
のない関数は、デフォルトではextern
です(他のモジュールからも見えます)。
..... –
@JamesMcNellisが編集されました。 – cnicutar
関数をstatic
と宣言すると、他のファイルにアクセスできなくなります。言い換えれば、宣言されたファイルだけが可視です。 「ローカル」機能。
C言語のstatic
(関数宣言キーワード、変数ではない)をオブジェクト指向言語のprivate
として関連付けることもできます。
たとえば、hereを参照してください。
質問は[tag:c]についてです。 「クラス」とは何ですか? –
私はもっとCに関心があります...私はクラスとC++を知らない –
@Keith:謝罪 - 先月Javaでのみコーディングされました。 –
static
がにそれが見えなくなりますよう関数やグローバル変数をマーキング現在の翻訳単位がオブジェクトファイルにコンパイルされると、リンカーに渡されます。
つまり、現在の翻訳単位内に内部リンケージしかありません。 static
を使用しない場合、または明示的にextern
ストレージクラス指定子を使用する場合、シンボルには外部リンケージがあります。 C99標準から
:識別さERS
の
6.2.2リンケージオブジェクトまたは関数でWiFiルスコープ識別子の宣言が静的ストレージクラス特異的ERが含まれている場合、識別子は内部のリンケージを持っています。プログラム全体を構成する翻訳単位とライブラリのセットで
と
、外部結合を持つ特定の識別子の各々 宣言が同じオブジェクトまたは 関数です。 1つの翻訳単位内では、内部識別子が の識別子の宣言は、同じオブジェクトまたは関数を示します。 リンケージのない識別子の各宣言は、一意のエンティティを示します。
lol @James: 'static double *** bzzzt();' – pmg