2016-05-13 21 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

相關問題