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

不通编译器甚至同一编译器的不同优化都有可能出现类似情况

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