我发现一些代码可以在GCC下编译,但不能在Clang下编译:
#include<stdio.h>
int main(int argc, char **argv) {
int test = 0;
if (test == 0) {
goto print_five;
} else {
return 0;
}
print_five:
int five = 6;
printf("value of five: %d\n", five);
return 0;
}
如果我将变量five
声明到函数的顶部(在test
下),
然后,程序在两个编译器下编译.
在阅读了问题[1]和[2]之后,我想这可能与 可能会跳过变量声明,类似于需要在case语句中创建范围.下面的示例也可以在两个编译器中编译.
print_five:
printf("value of five: ");
int five = 6;
printf("%d\n", five);
return 0;
print_five: ;
int five = 6;
printf("value of five: %d\n", five);
return 0;
然而,情况似乎并非如此,这与在标签后面紧跟着一个表达式有关(在问题[3]中也有解释). 为什么这个例子可以用GCC编译,而不能用Clang编译?这不是表示其中一个内部存在错误吗?