我发现了以下构造,其中一个变量被分配给一个似乎是复合语句的东西,foo
,在驱动程序中。为了比较,bar
产生未定义的行为将相同的代码视为正确的函数。它似乎不符合我对 C 语言及其预处理器的理解,所以我怀疑它是 GCC 扩展。这里执行的逻辑是什么?(请参见此处的输出。)
#include <stdio.h>
#define foo(c) ({ int x = c; x; })
int bar(char c) {
int x = c;
x;
}
int main(void) {
int x = foo('0');
int y = bar('A');
printf("%d\n%d\n", x, y);
return 0;
}
输出:
48
0