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

时间:2015-07-10 17:40:57

标签: c function operators

我的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.有人可以解释一下吗?

2 个答案:

答案 0 :(得分:1)

在声明中,

x = a() + b();

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

这意味着有两种可能的呼叫顺序:
1)a()首先然后b()。
2)b()首先,然后a()。

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

答案 1 :(得分:0)

+运算符不保证从左到右计算操作数。在这种情况下,b()之前正在评估a()