test(){ static int count=0; int i=0; i++; count++; printf("i=%d, count=%d\n",i,count); return; } |
このプログラムでは count と i の両方を 0 に初期化し、インクリメントした 後に関数を終了しています。ここで、i は自動変数であることに注意しましょう。 つまり、i はブロックの最後で消滅します。従って、この関数を呼び出す度に、 変数 i は生成され、0 に初期化されて、関数の実行後消滅します。これに対して、 静的変数 count は消滅しません。しかし、関数の呼び出しの度に初期化していた ならばその意味は i とほとんど変わりはない事になってしまいます。そこで、 静的変数では初期化はプログラムの起動時に一度だけ行われるようになっている のです。これによって、count は関数が呼び出される度に、インクリメントだけ が行われます。すなわち、count には関数が何度呼び出されたかの回数が記憶 できるようになっている訳です。 そのために、上の関数 test() を何度も呼び出すと、i の値は 1 のまま変化しない のに対して、count の値は 1,2,3,4...と増えて行きます。