« 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


 

ハワイ旅行| サトピの子連れグアム旅行記| グアム旅行の情報サイト| ガーデニング|

Copyright (C) 2009 Anne Corporation. All Rights Reserved.