2016-07-12 9 views
-2

次のコード印刷AA予期しない出力

#include <stdio.h> 
int main() 
{ 
    for(int i;i;i--) 
     printf("A"); 
    return 0; 
} 

可変iの初期値は、いくつかのガベージ値2ではなく、なぜですか?

変数iの有効期間は静的または自動ですか?

+5

2はガベージ値です。 – chux

+0

@chuxどのように確認できますか? – Codor

+2

このプログラムは、初期化されていない**自動保存期間**を持つオブジェクトの値を使用するための未定義の動作を示します。 – EOF

答えて

1

変数iの有効範囲は、for文全体(本体を含む)です。自動保存期間があり、ループ終了後に破棄されます。可変iがトラップ値とすることができるindetermined値を有する初期化されなかったとして、あなたは

for(static int i;i;i--) 
    printf("A"); 

例と同様に、静的な保存期間を有するとして宣言しなくてもよいです。

+0

トラップ値の場合、それでもUBが発生しますか? – ameyCU

+0

@ameyCUはい、例外が発生する可能性があります。 –

2

明らかに変数iは初期化されていません。つまり、実装の動作は定義されていません。 iの値はガベージ値のみです。ここは2です。

+0

編集していただきありがとうございます。 – Codor