通知
すべてクリア
Topic starter
2004年8月23日 5:57 AM
実行時にfor文のループ内に入らない現象が起きています。
1:for ( i = 0; i < iMax; i++ )
2:{
3: if ( flag & 0xFF00 == 0xFE00 )
4: {
5: a = b[i];
6: break;
7: }
8:}
上記のループをデバッグモードで実行しステップ実行すると、
iMaxの回数だけ1行目と8行目を行き来するだけで、
3~7行目は全く通りません。
また、ブレークポイントを設定しようとしても、
ループ内には設定できません。
このような現象が起きてしまう原因がお判りの方はいらっしゃいますでしょうか?
デバッグ環境はWindowsCE.netのPlatform Builder4.2です。
2004年8月23日 7:36 AM
0xFE00 != 0xFF00だから。
演算子の優先順位を調べればわかりますが,
二項&よりも==演算子の方が優先順位が高いです。
つまり,
> if ( flag & 0xFF00 == 0xFE00 )
は
if ( flag & (0xFF00 == 0xFE00) )
とみなされ,
if ( flag & 0 ) → if ( 0 )
と同じことになります。
2004年8月23日 9:18 AM
さらに賢いコンパイラは常に偽となるif文を完全に取り払います。
したがって生成されるコードはなく、ブレークもかからん、と。
Topic starter
2004年8月23日 3:40 PM
YuO,επιστημη 様、ご回答ありがとうございます。
== よりも & の方が優先順位が高いものと思い込んでおり、
このような事態になっておりました。
&の部分にカッコをつけることで無事解決しました。
本当にありがとうございました。