我正在尝试执行以下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/

10-10 20:37