プログラミング 2 静的変数
広域変数と局所変数 (通常の)局所変数 広域変数 関数(ブロック)の中で定義される変数 関数(ブロック)の中だけで通用する 定義された関数(ブロック)の外では見えない 関数(ブロック)の実行のたびに作られ,実行が終了すると 消滅する 広域変数 関数の外で定義される変数 定義以降ファイル全体で通用する プログラム実行の間,1 つの実態を持つ 関数の実行が終了しても消えない
static を伴う局所変数 static を伴う局所変数 static を伴う変数を使うと,関数に状態を持たせるこ とができる 関数(ブロック)内で定義される 関数(ブロック)の中だけで通用する プログラム開始時に一度だけ実体が作られ,プログラム終了 まで生存する 関数(ブロック)の実行が終了しても消滅しない static を伴う変数を使うと,関数に状態を持たせるこ とができる
static 変数の例(1) void func(void) { int a = 0; printf(“%d\n”, a); a++; return; } int main(void) { int i; for (i = 0; i < 10; i++) { func(); } return 0; }
static 変数の例(2) void func(void) { int a = 0; printf(“%d\n”, a); a++; return; } この a は通常の局所変数 関数実行のたびに作られ,関数の実行が終了すると消滅 「a++」されても関数終了で消えてしまう 出力されるのは毎回「0」
static 変数の例(3) void func(void) { static int a = 0; printf(“%d\n”, a); a++; return; } int main(void) { int i; for (i = 0; i < 10; i++) { func(); } return 0; }
static 変数の例(4) void func(void) { static int a = 0; printf(“%d\n”, a); a++; return; } この a は static を伴う局所変数 プログラム開始時に一度だけ作られ(初期化も一度だけ), 関数が終了しても消えない 「a++」されたことが保持される 呼び出しのたびに出力される値は 1 ずつ大きくなる
static 変数の特徴 通用範囲 生存期間 通常の局所変数 関数(ブロック)内 static 局所変数 プログラム実行中ずっと 広域変数 ファイル内(宣言以降)