我正在尝试执行以下C代码:
#include <stdio.h>
int a = 5;
int fun1(){
a = 17;
return 3;
}
int main(){
int b;
b = a + fun1();
printf("%d\n", b);
}
当我在Macbook上运行它时,我得到的答案是8,但是当我在Linux中运行时,我得到的答案是20。我有几个 friend 在运行它,每个使用Mac的人都得到8,而每个运行Linux的人都得到了8。 20.是什么原因造成的?
我对正确答案的兴趣不大,因为我对两种环境给出不同答案的原因很感兴趣。 OS X和Linux导致差异的原因是什么?
最佳答案
未指定对运算符+
进行参数评估的顺序。这意味着没有特别的顺序,可以在表达式fun1()
*中读取a
之前或之后对a + fun1()
进行求值。您将看到不同评估顺序对不同平台的影响。
*请注意,函数调用fun1()
引入了一个序列点,因此即使未指定操作数的评估顺序,也可以很好地定义a + fun1();
的行为。如果没有函数调用,将没有序列点(例如a + a++
),这将产生不确定的行为。
关于C代码在OS X和Linux上产生不同的结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29524251/