「これはヤバかったな」という遅刻エピソード

int j = 0;
for( ; ; ){
 printf( "%d ", j );
}
printf( "hoge \n" );

上記コードを無限ループで回したところ、表示されるのは
0の羅列ではなくhogeの羅列でした。
このような状況ってありえるのでしょうか?

環境はVisualC++2005 ExpressEditionです。

また、なぜかコンパイル中に上記のforのところで
warning C4127: 条件式が定数です。
という警告が出ていましたがなぜでしょうか。

A 回答 (1件)

★アドバイス


>0の羅列ではなくhogeの羅列でした。
 ↑
 『hoge』が1回表示される理由は分かりますが羅列ですか?
・コンパイラの最適化により for 文の内部にある printf() 行は実行されないことがあります。
 このため 0 の羅列が起きないのは分かります。でも『hoge』が1回の表示ではなくて羅列
 するのは不思議です。なぜ。
>warning C4127: 条件式が定数です。
 これも私の環境では警告メッセージは出ません。私のは VC++2003 です。EE ではない。
・質問のソースは main() 関数内に記述されているのですか?
 それともサブ関数に記述してそれを複数回呼び出しているのですか?
 この辺が分かれば『hoge』が羅列する理由も分かる気がします。
 もう少し全体像がわかるソースを補足して下さい。
・以上。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

VisualC++特有のカウンタ変数のスコープ対策でやってた
#define for ~
の記述がちょっと変でした。
無事、自己修正できました。

お礼日時:2007/06/29 17:23

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!