静的変数

static ストレージクラスは静的変数を定義します。static 修飾子は、データ型の前に示されます。

例:

int somefunc()
 {
  static int flag=10;
  ...
  return(flag);
 }

任意の式で初期化することが出来るシンプルなローカル変数とは異なり、静的変数は型に対応する定数または定数式によっての初期化が可能です。

静的変数はプログラム実行の瞬間から存在しており、特殊な OnInit() 関数が呼び出される前に一度だけ初期化されます。初期値が指定されていない場合は、静的ストレージクラスの変数の初期値はゼロとなります。

static キーワードで宣言されたローカル変数は、関数のライフタイムを通して値を保持します。このようなローカル変数は、関数の呼び出し時には、前回の呼び出し中に持っていた値が含みます。

関数の仮引数以外の全ての変数は静的に定義出来ます。ローカルレベルで宣言した変数が静的でない場合、そのような変数のためのメモリはプログラムスタックに自動的に割り当てられます。

例:

int Counter()
 {
  static int count;
  count++;
  if(count%100==0) Print("Function Counter has been called ",count," times");
  return count;
 }
void OnStart()
 {
//---
  int c=345;
  for(int i=0;i<1000;i++)
    {
    int c=Counter();
    }
  Print("c =",c);
 }

参照

データ型型のカプセル化と拡張性変数の初期化変数のアクセス権スコープとライフタイムオブジェクトの作成と解徐静的クラスメンバ