C言語 static 静的変数の使い方

変数に static指定子を付ける事で、その変数は静的変数となります。

静的ローカル変数

通常のローカル変数は、その関数から抜けると全て失われてしまいますが、

static 付きの静的変数とすれば、関数から抜けても値が保持されます。

また、この変数は、プログラムが終了するまで保持されます。

#include <stdio.h>

void show(void);

void main(void) {
      show();
      show();
      show();
}

void show(void) {
      static int count=0;

      count++;

      printf("%d\n", count);
}

このプログラムでは、関数 show 内で静的変数 count が使用されています。

1回目のshow関数呼び出しで静的変数 count の初期化が行われ、
countが1ずつ増えます。

2回目以降のshow関数呼び出しでは、count の初期化は行いませんが、
前回のcountの値が保持されています。

出力は、1 2 3 となります。

静的グローバル変数

通常のグローバル変数は、どこからでも使用する事ができますが、

static 付きの静的変数とすれば、そのファイル内からのみ使用できます

つまり、別ファイルからは使用できません。(externを使用してもダメ)

この変数もローカル変数と同様に、 プログラムが終了するまで保持されます。

program1.c

#include <stdio.h>

void show(void);

// 静的グローバル変数(定義・実体)
static int idata;

void main(void) {
      show();
}

program2.c

#include <stdio.h>

void show(void);

// グローバル変数(宣言・参照)
extern int idata;

void show(void) {
      idata = 10;            // エラーとなる。
      printf("%d\n", idata);      // エラーとなる。
}