Shammer's Philosophy

My private adversaria

C の static 変数

百聞は一見に如かず。やってみるべし。

#include <stdio.h>

int g = 0;

void static_test(){
    static int x = 0;
    int y = 0;
    printf("Global Static Normal\n");
    printf("====================\n");
    printf("%6d %6d %6d\n", g++, x++, y++);
    printf("====================\n");
}

int main(int argc, char * args[]){
    int i;
    for(i = 0 ; i < 5 ; i++){
	static_test();
    }
    return 0;
}

実行結果はこんな感じ。

Global Static Normal
====================
     0      0      0
====================
Global Static Normal
====================
     1      1      0
====================
Global Static Normal
====================
     2      2      0
====================
Global Static Normal
====================
     3      3      0
====================
Global Static Normal
====================
     4      4      0
====================

グローバル領域に宣言したものと値の有効範囲は同じようだ。参照可能なスコープはグローバル領域に定義した変数より限定される。