次のコード印刷AA
:予期しない出力
#include <stdio.h>
int main()
{
for(int i;i;i--)
printf("A");
return 0;
}
可変i
の初期値は、いくつかのガベージ値2
ではなく、なぜですか?
変数i
の有効期間は静的または自動ですか?
次のコード印刷AA
:予期しない出力
#include <stdio.h>
int main()
{
for(int i;i;i--)
printf("A");
return 0;
}
可変i
の初期値は、いくつかのガベージ値2
ではなく、なぜですか?
変数i
の有効期間は静的または自動ですか?
変数i
の有効範囲は、for文全体(本体を含む)です。自動保存期間があり、ループ終了後に破棄されます。可変i
がトラップ値とすることができるindetermined値を有する初期化されなかったとして、あなたは
for(static int i;i;i--)
printf("A");
例と同様に、静的な保存期間を有するとして宣言しなくてもよいです。
トラップ値の場合、それでもUBが発生しますか? – ameyCU
@ameyCUはい、例外が発生する可能性があります。 –
2はガベージ値です。 – chux
@chuxどのように確認できますか? – Codor
このプログラムは、初期化されていない**自動保存期間**を持つオブジェクトの値を使用するための未定義の動作を示します。 – EOF