第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 の中でしか使えません。 どこからでも使える便利な変数に、外部変数というものがあります。

< 前のページへ

Pagetop