c++ 編譯器優化引起的問題

int fun1(int& num)
{
    if(num)
        num += 100;
}

int fun2(int& num)
{
    if(!num)
        num -= 100;
}

int main()
{
    int num = 0;
    int num1 = fun1(num) + fun2(num);
    //debug下調用函數順序爲先fun1後fun2,最終num1=-100
    //release下調用順序爲先fun2後fun1,最終num1=0
    //不通編譯器優化執行方向不同,返回結果不通,多模算法都可能出現類似問題,不推薦上述方法執行函數
    //根據需求執行即可,類似如下:
    // num1 = fun1(num);
    // num1 += fun2(num);
    return 0;
}

不通編譯器甚至同一編譯器的不同優化都有可能出現類似情況

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章