使用 clang 与 gcc 编译嵌套函数



我有一个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)
     ^

最新更新