環境:WinXP SP3 VC++6
いつもお世話になっております。
メニュー→プロジェクトの設定→C/C++で変更できる、
最適化で、実行速度(O2)もしくはプログラムサイズ(O1)を指定すると
挙動が変わるのですが何故こうなるのか教えて頂きたいです。
参考になるページでも良いのでお願い致します。
void hoge(int i, int ii)
{
CString s;
s.Format("%d %d\n", i, ii);
AfxMessageBox(s);
}
void CMyTestDlg::OnButton1()
{
for(int i=0; i<5;)
hoge(i++, i);
}
結果:
コンパイルオプションO2もしくはO1
0 1
1 2
2 3
3 4
4 5
コンパイルオプションODもしくはD
0 0
1 1
2 2
3 3
4 4
リリースの時のみ強制終了するバグを調べてたら行き着きました。
これって結構常識なんでしょうか・・・
オプション次第で挙動が変わる別の例などもあったら是非ご教授下さい。
>最適化で、実行速度(O2)もしくはプログラムサイズ(O1)を指定すると
>挙動が変わるのですが何故こうなるのか教えて頂きたいです。
>hoge(i++, i);
未定義動作だから…じゃないですか?
http://social.msdn.microsoft.com/Forums/ja-JP/csharpexpressja/thread/23f65ca3-9cf6-49b4-9975-23a26fee4f20
瀬戸っぷ様
ご回答ありがとうございます、理解しました。
思い込みで勝手に書くとドはまりしますね。
調べてまた基礎から出直します・・・
すみません解決を入れ忘れました。
編集 削除