#include <stdio.h> int fx = 0; // 静的記憶域期間 + ファイル有効範囲 void func(void) { static int sx = 0; // 静的記憶域期間 + ブロック有効範囲 int ax = 0; // 自動記憶域期間 + ブロック有効範囲 printf("%3d%3d%3d\n", ax++, sx++, fx++); } int main(void) { int i; puts(" ax sx fx"); puts("---------"); for (i = 0; i < 10; i++) func(); puts("---------"); return (0); }
実行結果
ax sx fx --------- 0 0 0 0 1 1 0 2 2 0 3 3 0 4 4 0 5 5 0 6 6 0 7 7 0 8 8 0 9 9 ---------
静的記憶期間(static storage duration)
関数の中で"static"をつけて宣言されたオブジェクトや、関数の外で宣言・定義されたオブジェクトは、静的記憶期間をもつ。
オブジェクト生成のタイミング
プログラムの開始時、具体的にはmain関数を実行する前の準備段階
オブジェクト消去のタイミング
プログラム終了時。
オブジェクトの初期化のタイミング
オブジェクトの生成時。プログラムの流れが宣言を通過するたびに初期化することはない。
初期化子が与えられない場合
自動的に0で初期化される。
自動記憶域期間(automatic storage duration)
関数の中でstaticをつけずに定義されたオブジェクトは、自動記憶域期間をもつ。
オブジェクト生成のタイミング
プログラムの流れが、宣言を通過する時。
オブジェクト消去のタイミング
宣言を囲むブロックの終点すなわち" } "を通過する時、役目を終える。
初期化子が与えられない場合
初期値は不定値となる。