小编Jul*_*n D的帖子

C:当GCC从右到左评估时,为什么LLVM从左到右评估printf?

如此问题中所述:LLVM和GCC,不同的输出相同代码,LLVM和GCC导致相同代码的输出不同.

#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;
}
Run Code Online (Sandbox Code Playgroud)

LLVM输出给出:

increment returns 47
increment returns 52
increment returns 57
max of 50 …
Run Code Online (Sandbox Code Playgroud)

c printf gcc clang operator-precedence

3
推荐指数
1
解决办法
427
查看次数

标签 统计

c ×1

clang ×1

gcc ×1

operator-precedence ×1

printf ×1