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