gpt4 book ai didi

c - LLVM和GCC,不同的输出相同的代码

转载 作者:行者123 更新时间:2023-12-04 12:06:58 24 4
gpt4 key购买 nike

这是一个示例代码,只是为了显示 LLVM 编译器和 GCC 的不同输出。我想知道为什么?答案应该很简单,但是我看不出来。(Xcode 4.6.1)

代码:

#include <stdio.h>

#define MAX(a,b) ( (a) > (b) ? (a) : (b) )

int increment() {
static int i = 42;
i += 5;
printf("increment returns %d\n",i);
return i;
}

int main( int argc, char ** argv ) {
int x = 50;
printf("max of %d and %d is %d\n", x,increment(),MAX(x, increment()));
printf("max of %d and %d is %d\n", x,increment(),MAX(x, increment()));
return 0;
}

LLVM 输出:

increment returns 47
increment returns 52
increment returns 57
max of 50 and 47 is 57
increment returns 62
increment returns 67
increment returns 72
max of 50 and 62 is 72

GCC 输出:

increment returns 47
increment returns 52
max of 50 and 52 is 50
increment returns 57
increment returns 62
increment returns 67
max of 50 and 67 is 62

最佳答案

参数的评估顺序未指定 定义 。所以这个:

printf("max of %d and %d is %d\n", x,increment(),MAX(x, increment()));

导致 undefined 未指定的行为。这就是为什么你在两个编译器上有不同的结果。

另一个(潜在的)问题是:MAX - 它可能导致两次调用 increment。避免使用此类宏。

关于c - LLVM和GCC,不同的输出相同的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15929795/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com