函数调用命令,是GCC错误吗?

时间:2011-06-12 23:58:50

标签: c gcc compiler-construction

  

可能重复:
  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编译了相同的代码,输出是预期的。

1 个答案:

答案 0 :(得分:4)

没有。未指定调用发生的顺序。它们可以以任何顺序发生,但是对于在这里进行的每对函数调用,人们将看到另一个的所有副作用,或者没有(即它们不能并行运行,除非它们没有副作用,并且在这个例子中,他们有一个副作用,printf)。