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;
}
不通编译器甚至同一编译器的不同优化都有可能出现类似情况
本文探讨了在C++中,函数调用顺序如何受到编译器优化的影响,导致不同的执行结果。通过一个具体的例子,展示了在debug与release模式下,编译器优化策略的不同,以及这种差异如何影响程序的最终输出。文章建议避免依赖于未定义的函数调用顺序,以确保代码的一致性和可预测性。
1719

被折叠的 条评论
为什么被折叠?



