静的変数(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 変数の利点

  1. グローバル変数とローカル変数の中間の位置にあり、グローバルの問題を回避しつつ、関数内でのみアクセス可能な変数を作成できます。

  2. スタック領域を使用せず、プログラムの終了までデータを保持します。これにより、エラー処理やスタックが限られている環境で有用です。

  3. 名前の衝突を防ぎやすいです。同じファイル内でのみ変数名を使用できるため、他のファイルからの影響を受けません。

注意点

  • 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

いいなと思ったら応援しよう!