我刚刚意识到函数可以在C:
中的另一个函数内定义void main(){
int foo(){ return 2; };
printf("%d\n", foo());
}
除了是一个巧妙的技巧之外,对此有用的是内部函数对外部函数是私有的。但是......在“真实世界”的应用程序中这样做是否足够充分?使用此语法的最佳做法是什么?
答案 0 :(得分:14)
嵌套函数是非标准扩展名implemented by GCC(也许是我不了解的其他函数)。鉴于它不符合标准,最佳实践可能包括不在您打算移植的代码中使用它。
如果您的最终目标是在C中使用“私有”功能,那么最好使用单独的文件并使“私有”函数保持静态,以便它们不会链接到其他目标文件。
答案 1 :(得分:1)
我认为这是编译器扩展而不是C规范本身的一部分
请参阅:http://discuss.joelonsoftware.com/default.asp?interview.11.431470.11
答案 2 :(得分:1)
如果您正在编写将Pascal(允许嵌套过程)转换为C并依赖GCC将结果转换为二进制文件的编译器,那么此功能肯定是有用的。
答案 3 :(得分:0)
如果我没记错的话,嵌入式函数可以看到它们的父函数符号。在某些情况下,这可能有助于避免全局变量(帮助线程安全?)由于此功能是GCC特定的,我会设法避免它,除非我真的需要它。