为什么 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
被两个函数作为副作用修改,但没有未定义的行为函数调用。
我的 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
被两个函数作为副作用修改,但没有未定义的行为函数调用。