Ich habe mit Visual Studio 2005, auf dem eine C ++ Win32-Konsolenanwendung läuft, einen sehr ernsten Fehler gemacht. Das Problem wird angezeigt, wenn Sie den folgenden Code ausführen (vereinfacht), indem Sie die folgenden Projekteigenschaften verwenden: C ++ | Optimierung | Optimierung | / O2 (oder / O1, oder / Ox), C ++ | Optimierung | Optimierung des gesamten Programms | / GL, Linker | Optimierung | / ltcg
%Vor%Der Ausgang zeigt, dass der Wert 10 kleiner ist als der Wert 10! Ich habe bereits herausgefunden, dass das Ändern der Einstellung / O2 auf / Od das Problem löst (Einstellung / Og, die Teil von / O2 ist, verursacht das Problem), aber das verlangsamt wirklich die Ausführungszeit. Auch das Ändern des Codes ein bisschen kann es lösen, aber hey, ich kann nie sicher sein, dass der Code zuverlässig ist. Ich benutze Visual Studio 2005 Professional (Version 8.0.50727.867), Windows 7. Meine Fragen sind: Kann jemand versuchen, diesen Fehler mit Visual Studio 2005 zu reproduzieren, (ich habe bereits versucht, VS 2010, kein Problem), und wenn ja, was passiert hier? Kann ich davon ausgehen, dass neuere Versionen dieses Problem gelöst haben (ich erwäge den Kauf von VS 2012) Danke
Sie können Ihr Beispiel signifikant reduzieren und trotzdem das gleiche Problem bekommen! Sie benötigen nicht zwei Instanzen, und Sie benötigen keine der anderen lokalen Variablen oder Mitgliedsvariablen. Außerdem können Sie MAXVAL
fest codieren.
Kurze Zusammenfassung dessen, was das Problem "löst":
MAXVAL
ein nicht-const int
setupVal2
auf einen Wert kleiner als 10 10<val
zu val>10
!!!
Hier ist meine minimale Version, um das Problem zu reproduzieren:
%Vor% Das Problem, wie es bei der Disassemblierung beobachtet wird, ist, dass der Compiler denkt, dass 10<val
immer wahr ist und daher die Prüfung auslässt.
Tags und Links c++ visual-c++ compiler-bug visual-c++-2005