2016-05-13 6 views
4

私はVS 2013/Win64の/リリースでこのコードをしようとすると、私は間違った結果を得る:それは1 1を印刷します。ビジュアル2013のWin32 /デバッグ/リリース&のWin64 /デバッグで長い長いVS 2013リリースのWin 64間違った結果

、結果は正しいです。

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

どのようにこの結果を説明できますか?

+0

を参照してください何でもその価値のために、Optimization Enabledで印刷されています。 '右クリックプロジェクト - >プロパティ - > C/C++ - >最適化 - – BackDoorNoBaby

+0

option'>「最適化」私はちょうど' Optimization'を無効にしてそのコードを実行した、と私は正しい結果が – BackDoorNoBaby

+0

私はこれを再現することができましたローカルに。オプティマイザがどうにかして混乱しているようだ... – Angew

答えて

1

プロパティウィンドウの左上にあるx64

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

ConfigurationためReleaseモードでのプロジェクトの無効化、最適化を右上にRelease
Platformに設定する必要がx64

に設定する必要があります編集: 中間に一時変数を持つとinc[0] - inc[1]

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

正しい値は、最適化は、リリースモード用にオンになっている場合

+2

これは問題を取り除きますが、なぜリリースビルドを最適化しないようにしたいのですか? – NathanOliver

+2

この質問に正しく答えるには、最適化がこれを行う理由を説明する必要があります。 – NathanOliver

+0

私は確信していませんが、最適化が無効になるまで、コードの評価が不可解に処理されていた問題が過去にありました。根本原因を突き止めたら、私の答えを更新します。 – BackDoorNoBaby