【发布时间】:2013-09-18 11:34:22
【问题描述】:
我在使用 Visual Studio 2005 运行 C++ Win32 控制台应用程序时遇到了一个非常严重的错误。使用以下项目属性运行以下代码(简化)时,将显示该问题:C++|优化|优化|/O2(或/O1,或/Ox),C++|优化|整个程序优化|/GL,链接器|优化|/ltcg
#include "stdafx.h"
#include <iostream>
using namespace std;
const int MAXVAL=10;
class MyClass
{
private:
int p;
bool isGood;
public:
int SetUp(int val);
};
int MyClass::SetUp(int val)
{
isGood = true;
if (MAXVAL<val)
{
int wait;
cerr<<"ERROR, "<<MAXVAL<<"<"<<val<<endl;
cin>>wait;
//exit(1); //for x64 uncomment, for win32 leave commented
}
if (isGood) p=4;
return 1;
}
int _tmain(int argc, _TCHAR* argv[])
{
int wait=0, setupVal1=10, setupVal2=12;
MyClass classInstance1;
MyClass classInstance2;
if (MAXVAL>=setupVal1) classInstance1.SetUp(setupVal1);
if (MAXVAL>setupVal2) classInstance2.SetUp(setupVal2);
cerr<<"exit, enter value to terminate\n";
cin>>wait;
return 0;
}
输出显示值 10 小于值 10!我已经发现将设置 /O2 更改为 /Od 可以解决问题(设置 /Og,它是 /O2 的一部分,会导致问题),但这确实会减慢执行时间。稍微改变一下代码也可以解决它,但是嘿,我永远不能确定代码是可靠的。我正在使用 Visual Studio 2005 专业版(版本 8.0.50727.867),操作系统 Windows 7。 我的问题是:有人可以尝试使用 Visual Studio 2005 重现此错误(我已经尝试过 VS 2010,没问题),如果是这样,这里会发生什么? 我可以假设较新的版本已经解决了这个问题(我考虑购买 VS 2012) 谢谢
【问题讨论】:
-
现在还支持VS2005吗?它已经 8 岁了。
-
在我的VS2005上试了一下,确实输出是
ERROR, 10<10 -
您是否考虑过下载 Visual Studio 的快速版本?每个发布年份包含的编译器都相同
-
Express 版本不包含 openMP
标签: c++ visual-c++ visual-c++-2005 compiler-bug