ループ内に入らない – プログラミング – Home

通知
すべてクリア

[解決済] ループ内に入らない


kuroi
 kuroi
(@kuroi)
ゲスト
結合: 20年前
投稿: 4
Topic starter  

実行時に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です。


引用未解決
トピックタグ
YuO
 YuO
(@YuO)
ゲスト
結合: 22年前
投稿: 320
 

0xFE00 != 0xFF00だから。

演算子の優先順位を調べればわかりますが,
二項&よりも==演算子の方が優先順位が高いです。
つまり,
> if ( flag & 0xFF00 == 0xFE00 )

if ( flag & (0xFF00 == 0xFE00) )
とみなされ,
if ( flag & 0 ) → if ( 0 )
と同じことになります。


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 21年前
投稿: 600
 

さらに賢いコンパイラは常に偽となるif文を完全に取り払います。
したがって生成されるコードはなく、ブレークもかからん、と。


返信引用
kuroi
 kuroi
(@kuroi)
ゲスト
結合: 20年前
投稿: 4
Topic starter  

YuO,επιστημη 様、ご回答ありがとうございます。
== よりも & の方が優先順位が高いものと思い込んでおり、
このような事態になっておりました。
&の部分にカッコをつけることで無事解決しました。
本当にありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました