可能性のある複製:
Cプログラムで「静的」とはどういう意味ですか?
Cでstatic
キーワードは何を意味しますか?
ANSI-Cを使用しています。いくつかのコード例で見ましたが、変数の前と関数の前でstatic
キーワードを使用しています。変数で使用する場合の目的は何ですか?そして、関数で使用する場合の目的は何ですか?
簡単な答えとして、変数を定義するときにstatic
キーワードには2つの使用法があります。
1- static
キーワードを使用してファイルスコープで定義された変数、i.e。関数の外部で定義された変数は、そのファイル内でのみ表示されます。他のファイルからそれらにアクセスしようとすると、リンク時に未解決のシンボルになります。
2-関数内のブロック内でstatic
として定義された変数は、同じコードブロックの異なる呼び出しで持続または「存続」します。初期化されていると定義されている場合は、一度だけ初期化されます。 static
変数は通常、デフォルトで0
に初期化されることが保証されています。
関数の本体内のstatic
、つまり変数ストレージ分類子として使用すると、変数が関数呼び出し間でその値を保持するようになります–関数内の静的変数はグローバル変数であり、関数。このstatic
の使用は、スレッドで使用される関数を常に作成しますnsafe避けるべきです。
もう1つの使用例は、グローバルスコープでstatic
を使用することです。つまり、グローバル変数と関数に使用します。静的関数とグローバル変数はコンパイルユニットに対してローカルです。つまり、コンパイル済みのエクスポートテーブルバイナリオブジェクト。したがって、名前空間を汚染しません。問題のコンパイルユニット(Cファイルなど)の外部からアクセスできないように、すべての関数とグローバル変数を静的に宣言することをお勧めします。静的変数はヘッダーファイルに配置しないでください(非常にまれな特殊なケースを除く)。