« C言語:static 関数への使用 | HOME | »
C言語:static 変数
#include
void counter( );
void main() {
int i;
for (i=0; i < 10; i++) {
counter();
}
}
void counter( ) {
int cnt=0;
cnt++;
printf("%d回目の呼び出しですn", cnt);
}
実行してみてください。どうなりましたか?
実は、変数には、人間で言うところの寿命に相当するものがあるのです。
通常の変数は、宣言した場所のすぐ外側にある、「{ 」と「 }」の間までが寿命になっています(この範囲を、その変数のスコープと言います)。
上の例ならば、
void counter( )
{ ←ここから
int cnt=0;
cnt++;
printf("cntは今、%dですn", cnt);
} ←ここまで
ということは、一旦、関数 counter から main 関数に戻った時点で、変数 cnt の寿命は尽きてしまっていたのです。それ以降、関数 counter に入るたびに、変数cntは作られて、またすぐに寿命が尽きているのです。
これでは、困ってしまいますね。正しくカウントアップできません。
これは、次のように変数を宣言すると、うまく行きます。
int counter( ) {
static int cnt;
cnt++;
printf("cntは今、%dですn", cnt);
}
どうなりましたか?
staticを付けると、変数は、プログラムの開始から終了まで生き続けます。つまり、プログラム中ずっと有効な寿命を与えられたのです。
さっそくコンパイルして、実行してみてください。
ちなみに、staticを付けると、変数は自動的に0に初期化されます。しかし、便利だと思っても、多用しないでください。あなたのプログラムを見た人は、staticを付けた変数には、何か特別な意味があるはずだと解釈するからです。
しかし、static変数も結局は、関数 counter の中でしか使えません。
http://www.sgnet.co.jp/c/10-2.htm