ソフトウェアエンジニア現役続行

雑多なことを綴ります

静的変数(static変数)の初期化

C言語では、自動変数は明示的に初期化をしないと、その自動変数の値は未定義です。なので自動変数には明示的に初期化をする必要があります。

一方、静的変数(static変数)は明示的に初期化をしないと、0(数値型)またはNULL(ポインタ型)に初期化されます。

int i; /* 何が入っているか分からない */
static int j; /* 0が入っている */

ただし、単一の変数の宣言だったら、たとえ0で初期化されているとはいえ、

static int j;

よりも

static int j = 0;

と明示的に書いた方が可読性が高くて良いでしょう。

しかし、配列を扱うときなどは、このように明示的に表すのが難しく、初期値を省略するのが一般的です。

例えば以下のように

char *p[15]; /* 各要素はNULLで初期化されている */

なぜなら、明示的に表そうとすると、

char *p[15];
for ( i=0; i<15; i++)
  p[i] = NULL;

といちいち書かなくてはならないからです。


追記:
グローバル変数も同様に0で初期化されます。