Static storage duration
From cppreference.net
識別子が記憶クラス指定子 _Thread_local なしで宣言され、かつ外部リンケージまたは内部 linkage を持つか、記憶クラス指定子 static を持つオブジェクトは、静的記憶域期間を持ちます。その寿命はプログラムの実行全体にわたり、格納された値はプログラム開始前に一度だけ初期化されます。
注記
その格納値は一度だけ初期化されるため、静的記憶域期間を持つオブジェクトは関数の呼び出しをプロファイリングできます。
キーワード static のもう1つの用途は ファイルスコープ です。
例
このコードを実行
#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