web-dev-qa-db-ja.com

ANSI-Cで静的とはどういう意味ですか

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

Cでstaticキーワードは何を意味しますか?

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

32
Sency

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

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

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

57
Roux hass

関数の本体内のstatic、つまり変数ストレージ分類子として使用すると、変数が関数呼び出し間でその値を保持するようになります–関数内の静的変数はグローバル変数であり、関数。このstaticの使用は、スレッドで使用される関数を常に作成しますnsafe避けるべきです。

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

32
datenwolf