アカウント名:
パスワード:
VC++ 2008を持っていないので手伝えないが、一応念のために、調べておいた方が良いと思うんだ。
intmain( int argc, char *argv[] ){ int a, b;#define VAL 1 if ( VAL < VAL ) printf( "%d: CONST < CONST fail\n", VAL ); a = VAL; if ( a < VAL ) printf( "%d: VAL < CONST fail\n", VAL ); b = VAL; if ( VAL < b ) printf( "%d: CONST < VAL fail\n",
if では特に問題はありませんでした。http://srad.jp/comments.pl?sid=498582&cid=1780417 [srad.jp] で調べて頂いたとおり、問題は while() の噛み砕きすぎなんでしょう。こうなると一時的であってもなぜ if で括って回避できたかが謎ですね、いまどきのコンパイラであれば、直後の類似条件の while() を見て無視される方が順当でしょうから。
詳細な調査をありがとうございます。他の方々も。
でも毎度毎度こんな検証しなきゃいけないわけ?もしかして。他にもこんな不具合が隠れてなきゃ良いんですけど。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
開いた括弧は必ず閉じる -- あるプログラマー
それってつまり 0 < 0 だけど -1 < -1 じゃないってこと? (スコア:1)
VC++ 2008を持っていないので手伝えないが、一応念のために、調べておいた方が良いと思うんだ。
fjの教祖様
Re:それってつまり 0 0 だけど -1 -1 じゃないってこと? (スコア:1)
if では特に問題はありませんでした。
http://srad.jp/comments.pl?sid=498582&cid=1780417 [srad.jp] で調べて頂いたとおり、問題は while() の噛み砕きすぎなんでしょう。
こうなると一時的であってもなぜ if で括って回避できたかが謎ですね、
いまどきのコンパイラであれば、直後の類似条件の while() を見て無視される方が順当でしょうから。
Re: (スコア:2, 参考になる)
↓のパターンで今回の件が大体説明出来てるんじゃないかと。
最適化でのバグの問題、最適化で消えてしまうコードの問題、
関数呼び出しかインライン展開かの問題の 3 つがごちゃまぜっぽい。
a) オリジナルコードをベースとしたテスト
/Ox と /GL を共につけない, if で対策しない
→ 関数呼び出しコード、関数の中は正しいコード
→ 正しい結果
/Ox と /GL を共につける, if で対策しない
→ 関数呼び出しコード、関数の中は正しくないコード
→ 正しくない結果
/Ox と /GL を共につけない, if で対策する
→ 関数呼び出しコード、if は最適化されないので消えない、 関数の中
Re:それってつまり 0 0 だけど -1 -1 じゃないってこと? (スコア:1)
詳細な調査をありがとうございます。他の方々も。
でも毎度毎度こんな検証しなきゃいけないわけ?もしかして。
他にもこんな不具合が隠れてなきゃ良いんですけど。