静的変数(static variable)
C言語における static 変数について。
static 変数の基本概念
static 変数は、C言語において重要な概念の一つです。
static 変数は、ファイル全体(同一ファイル内のすべての関数)で認識されます。
他のファイルからは参照できません。
初期化されていない場合、デフォルト値(0、NULL、falseなど)となります。
グローバル変数としての static 変数
static 変数をファイル外部で宣言すると、グローバル変数として機能します。
static int globalVar;
この変数は、ファイル内のすべての関数からアクセス可能ですが、他のファイルからは見えないことに注意してください。
ローカル静的変数
static キーワードを関数内で使用すると、静的変数を作成できます。
void myFunction() {
static int localStaticVar = 0;
localStaticVar++; // 各呼び出し時、値が増加
printf("%d\n", localStaticVar);
}
この変数は:
関数内で宣言されます。
関数の各呼び出し時に初期化されます。
関数を抜けても値が保持されます。
static 変数の利点
グローバル変数とローカル変数の中間の位置にあり、グローバルの問題を回避しつつ、関数内でのみアクセス可能な変数を作成できます。
スタック領域を使用せず、プログラムの終了までデータを保持します。これにより、エラー処理やスタックが限られている環境で有用です。
名前の衝突を防ぎやすいです。同じファイル内でのみ変数名を使用できるため、他のファイルからの影響を受けません。
注意点
static 変数は初期化されていない場合、デフォルト値(0、NULL、falseなど)となります。必ず初期化することをお勧めします[3]。
グローバル静的変数とローカル静的変数は異なる特性を持つので、適切に使い分けることが重要です。
Citations:
[1] https://www.sejuku.net/blog/24205
[2] https://monozukuri-c.com/langc-funclist-static/
[3] https://note.com/kazushinakamura/n/n981fcf8d0546
[4] https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q12293361882
[5] https://qiita.com/Nekonecode/items/19f3a261a8391853ddec
[6] https://www.sgnet.co.jp/technology/c/10-2/
[7] https://www.youtube.com/watch?v=PmJ6FaEXBno
[8] https://okwave.jp/qa/q8252729.html
[9] https://9cguide.appspot.com/12-02.html
[10] https://oshiete.goo.ne.jp/qa/8280317.html