2016-05-13 18 views
4

当我在VS 2013/Win64/Release中尝试使用此代码时,出现错误结果:它会打印1 1long long VS 2013 Release Win 64错误结果

在Visual 2013 Win32/Debug/Release & Win64/Debug中,结果是正确的。

Visual Studio项目是使用默认参数创建的。

#include <iostream> 
int main(int argc, char* argv[]) 
{ 
    long long inc[2] = { 0, 1 }; 
    long long dinc[2] = { 0, 0 }; 

    dinc[0] = inc[1] - inc[0]; 
    dinc[1] = inc[0] - inc[1]; //expected -1 ==> display 1 

    for (int i = 0; i < 2; ++i) 
     std::cout << i << "\t" << dinc[i] << "\n"; 

    return 0; 
} 

这个结果怎么解释?在属性窗口的左上角为Release模式项目

+0

查看是否开启了优化的发布模式。 '用鼠标右键单击项目 - >属性 - > C/C++ - >优化 - >“优化”选项 – BackDoorNoBaby

+0

我刚刚运行该代码与'优化'禁用,并得到了正确的结果 – BackDoorNoBaby

+0

我可以重现此本地。似乎优化器以某种方式混乱... – Angew

回答

1

禁用优化x64

right-click on Project-->Properties-->C/C++-->Optimization-->Disabled

Configuration应在右上角设置为Release
Platform应设置为x64

编辑: 用一个临时变量在中间举行inc[0] - inc[1]

long long total = 0; 
total = inc[0] - inc[1]; 
dinc[1] = total; 

正确的价值观都印有Optimization Enabled,不管是什么它的价值

+2

这样可以解决问题,但为什么您希望发布版本不被优化? – NathanOliver

+2

要正确回答这个问题,它应该解释为什么优化是这样做的。 – NathanOliver

+0

我不确定,但过去我曾经遇到过一些问题,代码中的评估无法正确处理,直到优化被关闭。一旦我找到根本原因,我会更新我的答案。 – BackDoorNoBaby

相关问题