静的変数は静的記憶域クラスに宣言されます。
static修飾子はデータ型の前に書きます。
静的変数は、任意の式で
初期化する事が出来る普通のローカル変数とは異なり、
データ型に合った定数(または定数式)で初期化出来ます。
静的変数はプログラム実行の瞬間から存在しており、プログラムがロードされた後に一度だけ初期化されます。
初期値が指定されていな場合、静的記憶域クラスの変数はゼロの初期値が設定されます。
静的変数の
スコープは、変数が宣言されているローカルブロックです。
static修飾子で宣言されたローカル変数は、関数が終了して値を保持し続けます。
その為、次に同じ関数が呼び出された時に、前回呼び出し時の値が含まれています。
ブロック内の全ての変数は(関数の
仮引数を除く)staticで宣言する事が出来ます。
ローカルレベルで宣言された非静的変数(static修飾子の無い変数)のメモリ、
自動的にスタック領域へ割り当てられます。
サンプルソース:
void OnInit(){
sub_function();
sub_function();
}
void sub_function() {
static int s_icount = 10;
int icount = 10;
s_icount++;
icount++;
Print(s_icount,":",icount);
}