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

看到这段代码

#include int main() { void test(void) { printf("test"); return; } printf("main"); return 0; } 

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

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

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

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

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

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


关于您的更新,有嵌套函数的用途。 它们可以通过限制范围和可见性来帮助封装。 但是,如果没有嵌套函数,没有任何问题无法完全解决,我认为这解释了为什么它们是一个很少使用的GCC特性。

定义嵌套函数(即在另一个函数内部)是有效的,唯一的限制是前一个函数的作用域受封闭函数的限制。 这就像定义局部变量一样。 您可以在此处找到更多信息: http : //gcc.gnu.org/onlinedocs/gcc/Nested-Functions.html

Joachim关于嵌套函数作为GCC扩展的答案是正确的; 你还问过它是否有任何用处:我看过数百个项目的源代码,从未见过有人使用过这个特殊的GCC扩展。

是的,我们可以在其他function中定义一个function。 我已经在gcc中编译了下面的写行,并且它成功运行而没有显示错误。

 #include; void main() { int sum() { int a=30, b=10, c=20, sum=0; sum=a+b+c; return sum; } int a; a=sum(); printf("Sum = %d", a); } 

O / P:60

我知道GCC将此作为扩展。 据我所知,这不是标准的一部分。