第10章 C言語の関数2 ~ 外部変数とstatic変数の説明を含む ~
今回は、内容が短かったので、もう一つ説明します。
static変数と(staticは、英語で静的なという意味)、外部変数というものを説明します。
まず、次の記述を打ち込んでください。
このプログラムは、関数を10回呼び出して、その関数の中で、
呼ばれた回数を毎回表示しようとしています。
-- リスト25 --
#include <stdio.h>
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 の中でしか使えません。
どこからでも使える便利な変数に、外部変数というものがあります。