函数调用顺序,是GCC bug吗? [重复]

问题描述 投票:0回答:1

可能的重复:
未定义的行为和序列点
函数调用顺序

我在使用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 编译了相同的代码,输出是预期的。

c gcc
1个回答
4
投票

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

printf
)。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.