为什么 x = a() + ab();在不同的机器上有不同的结果?

Why Does x = a() + ab(); has different results in different machines?

我的 C 程序中有两个函数。让我们将它们命名为 a()a()。在代码的某些地方,我将他们的结果用在一个方程中:看看这个:

int number = 2;
int x;

int a(){
    number += 3;
    return number;
}

int b(){
    number *= 2;
    return number;
}

x = a() + b();

printf("%d", x);

这里我希望打印 15 个。但是我得到 11。谁能解释一下?

+ 运算符不保证将从左到右计算操作数。在这种情况下,b()a().

之前被评估

在声明中,

x = a() + b();

调用函数 a() 和 b() 的顺序是未指定。但是在调用每个函数之前和从每个函数返回之后都有一个序列点。

这意味着有两种可能的调用顺序:
1) 先a()再b().
2)先是b(),然后是a()。

在情况 (1) 中,结果将为 15,在情况 (2) 中,结果将为 11。尽管 number 被两个函数作为副作用修改,但没有未定义的行为函数调用。