34

重複の可能性:
Cプログラムで「静的」とはどういう意味ですか?

staticCでのキーワードの意味は何ですか?

私はANSI-Cを使用しています。いくつかのコード例で見たようにstatic、変数の前と関数の前でキーワードを使用しています。変数で使用する場合の目的は何ですか?そして、関数で使用する場合の目的は何ですか?

4

2 に答える 2

58

簡単な答えと同じように、static変数を定義するときのキーワードには2つの使用法があります。

static1-キーワードを使用してファイルスコープで定義された変数、つまり定義された外部関数は、そのファイル内でのみ表示されます。他のファイルからそれらにアクセスしようとすると、リンク時に未解決のシンボルが発生します。

2-static関数内のブロック内として定義された変数は、同じコードブロックのさまざまな呼び出しにわたって存続または「存続」します。それらが初期化されて定義されている場合、それらは一度だけ初期化されます。static変数は通常0、デフォルトで初期化されることが保証されています。

于 2011-01-02T01:16:33.260 に答える
34

static関数の本体内、つまり変数ストレージ分類子として使用すると、その変数は関数呼び出し間でその値を保持します。関数内の静的変数は、その関数にのみ表示されるグローバル変数であると言えます。この使用によりstatic、スレッドで使用される関数は常に安全ではなくなり、回避する必要があります。

もう1つのユースケースはstatic、グローバルスコープ、つまりグローバル変数と関数の使用です。静的関数とグローバル変数はコンパイルユニットに対してローカルです。つまり、コンパイルされたバイナリオブジェクトのエクスポートテーブルには表示されません。したがって、名前空間を汚染することはありません。問題のコンパイル単位(つまりCファイル)の外部からアクセスできないように、静的なすべての関数とグローバル変数を宣言することをお勧めします。静的変数をヘッダーファイルに配置してはならないことに注意してください(非常にまれな特殊なケースを除く)。

于 2011-01-02T01:13:50.153 に答える