函数定义在另一个函数定义中:它有效吗?

Jee*_*tel 6 c function

看到这段代码

#include<stdio.h>

int main()
{
    void test(void)
    {
        printf("test");
        return;
    }
printf("main");
return 0;
}
Run Code Online (Sandbox Code Playgroud)

这个男女同校工作正常,并没有给出任何警告和错误.我不知道为什么会这样?这里我在其他函数定义中写了一个函数定义,所以它有效吗?

编辑:如果是,那么有任何用途吗?

为什么gcc需要添加这个功能作为扩展..这应该是任何用途吗?不是吗?!

Dav*_*nan 6

函数定义的嵌套依赖于GCC扩展来工作.标准没有描述.

如果您希望您的代码与其他编译器一起使用,那么您应该避免使用这些技术.更重要的是,如果你与其他开发人员合作,我预测他们中的许多人会不喜欢使用这种非标准结构.

我不是GCC的专家,但我很确定有禁用扩展的编译器选项.这将允许您获取编译​​器以确保您不编写无法与其他编译器一起编译的代码.


关于您的更新,有嵌套函数的用途.它们可以通过限制范围和可见性来帮助封装.然而,没有任何问题不能很好解决的充分没有嵌套函数,我想解释了为什么他们是一个很少使用的GCC特点.

  • @Sahil因为C不是这样设计的. (3认同)