関数で使用される自動 ストレージは、 autoキーワードを使用して宣言されたi変数を再初期化しません。
Practice.c : main() と func() はPractice.cにあります
#include <stdio.h>
main()
{
func();
func();
func();
}
func()
{
auto int i=1;
printf(" i = %d",i);
i=i+1;
}
コンパイル後にPractice.exeを実行すると、出力は次のようになります。
i = 1
i = 1
i = 1
main()がfunc( )を呼び出すたびに、i は 1 に再初期化されます。iのスコープはfunc()ブロック内にあり、制御がこのブロックから出るとiの値が失われるため、これは正しいことです。したがって、このfunc()関数を 2 回目に呼び出すと、 iの値が1に再初期化されます。
次のNew.cプログラムを確認してください。
New.c : main()とfunc()の両方を含む
#include <stdio.h>
main()
{
func();
func();
func();
func();
func();
func();
func();
func();
}
func()
{
auto int i;
printf(" i = %d",i);
i=i+1;
}
念のため、関数func()を8 回呼び出しました。ただし、New.c では、 iは初期化されません。コンパイル後にこのプログラムを実行すると、出力は次のようになります。
i = 4201582
i = 4201583
i = 4201584
i = 4201585
i = 4201586
i = 4201587
i = 4201588
i = 4201589
出力は、呼び出しごとに増分を示します。この背後にある正確な理由は何ですか?