我有一个c文件,我可以使用如下所示的GCC
毫无问题地编译它:
gcc foo.c
但是使用相同的文件,我收到使用 main 在 main 中使用 clang
定义函数的错误:
clang foo.c
foo:230:1: error: function definition is not allowed here
{
^
foo.c:241:1: error: function definition is not allowed here
{
^
foo.c:253:1: error: function definition is not allowed here
这些错误实例是代码主部分中新函数的定义。我想知道为什么 GCC 没有为此烦恼,而 clang 却对此感到困扰?
函数中定义的函数是 C 语言的扩展,由 gcc 实现。默认情况下启用此功能。如果你让 gcc 成为标准 C 编译器,就像 -ansi -pedantic
或 -std=C99
或类似编译器一样,它也会抱怨嵌套函数定义:
x.c: In function ‘main’:
x.c:8:5: warning: ISO C forbids nested functions [-Wpedantic]
int nested(void)
^