静的記憶域期間
From cppreference.com
記憶域クラス指定子 _Thread_local を付けずに宣言され、かつ、外部または内部リンケージを持つか、あるいは記憶域クラス指定子 static を付けて宣言されたオブジェクトの識別子は、静的記憶域期間 (static storage duration) を持ちます。その生存期間はプログラムの全実行期間となり、その格納値はプログラムの開始前に一度だけ初期化されます。
[編集] 注意
格納値は一度しか初期化されないため、静的記憶域期間を持つオブジェクトは、関数の呼び出し回数を数える(プロファイルする)ことができます。
キーワード static のもう一つの用途は、ファイルスコープです。
[編集] 例
このコードを実行
#include <stdio.h> void f (void) { static int count = 0; // static variable int i = 0; // automatic variable printf("%d %d\n", i++, count++); } int main(void) { for (int ndx=0; ndx<10; ++ndx) f(); }
出力
0 0 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9