可能重复:
Undefined Behavior and Sequence Points
Order of function call
当我使用GCC 4.5.2(x86 32位)编译它时,我在以下代码中发现了一个问题。
# include <stdio.h>
int function(int x){
printf("%d\n", x);
return 2*x + 1;
}
int main(){
int x = 3*function(1) + 4*function(2) + 5*function(3) + 6*function(4) + 7*function(5) + 8*function(6);
printf("%d\n", x);
return 0;
}
预期产量:
1
2
3
4
5
6
299
实际GCC输出:
1
2
4
3
6
5
299
我用clang编译了相同的代码,输出是预期的。
答案 0 :(得分:4)
没有。未指定调用发生的顺序。它们可以以任何顺序发生,但是对于在这里进行的每对函数调用,人们将看到另一个的所有副作用,或者没有(即它们不能并行运行,除非它们没有副作用,并且在这个例子中,他们有一个大副作用,printf
)。