C 言語 | 構造体の宣言 | 静的変数 - static

通常のローカル変数は関数が終了すると値を失う。static 指定子を付けた静的変数は永続的な寿命を持つ。関数内だけで利用するローカル変数でありながら、グローバル変数のようにアプリケーションが終了するまで値を保持する。

永続的なローカル変数

関数内で宣言した変数は、通常はローカルな寿命を持つ。関数を実行するときに初期化され、関数から戻ると解放される。計算に必要な一時的な保存領域に適している。

ただし、長期間保持したい状態もある。たとえば、関数が何回呼び出されたかを記録する場合である。関数内で専用のカウンターを増やす方法は確実だが、自動変数では関数から戻るたびに値を失う。

グローバル変数なら値を保持できるが、別の関数から誤って変更される可能性がある。静的変数を使うと、プログラムの終了まで値を保持しながら、ほかの関数からアクセスできないようにできる。

static 指定子

static 型 変数名 ...

このように宣言した変数はグローバルな寿命を持つ。関数内で宣言した場合でも、関数から戻るときに破棄されない。

コード 1

#include <stdio.h>

void ShowCount(void) {
 static int iCount = 0;
  printf("iCount = %d\n" , iCount++);
}

int main() {
 ShowCount();
  ShowCount();
  ShowCount();
  return 0;
}

ShowCount() 関数は呼び出された回数を表示する。静的変数 iCount は 1 回だけ初期化され、呼び出すたびに増加する。

静的変数は、固定文字列を格納する文字配列など、常に同じ値を使う場合の初期化コストを減らす目的でも利用できる。