Namespaces
Variants

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