c – 漫长的VS 2013 Release Win 64错误的结果

当我在VS 2013 / Win64 / Release中尝试此代码时,我得到了错误的结果:它打印1 1.

在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;
}

如何解释这个结果?

最佳答案 在x64的发布模式下禁用项目优化

右键单击Project – > Properties – > C/C++ – > Optimization – > Disabled

属性窗口左上角的配置应设置为Release
右上角的平台应设置为x64

编辑:
在中间有一个临时变量来持有inc [0] – inc [1]

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

无论其价值如何,都会使用Optimization Enabled打印正确的值

点赞