我的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.有人可以解释一下吗?
答案 0 :(得分:1)
在声明中,
x = a() + b();
调用函数a()和b()的顺序是未指定。但是在调用每个函数之前以及从每个函数返回之后都有一个序列点。
这意味着有两种可能的呼叫顺序:
1)a()首先然后b()。
2)b()首先,然后a()。
在情况(1)中,结果将是15,在情况(2)中,结果将是11.尽管number
被两个函数修改为函数调用的副作用,但没有未定义的行为。
答案 1 :(得分:0)
+
运算符不保证从左到右计算操作数。在这种情况下,b()
之前正在评估a()
。