C语言中的嵌套函数 - 最佳实践

时间:2010-03-18 02:52:04

标签: c

我刚刚意识到函数可以在C:

中的另一个函数内定义
void main(){
  int foo(){ return 2; };
  printf("%d\n", foo());
}

除了是一个巧妙的技巧之外,对此有用的是内部函数对外部函数是私有的。但是......在“真实世界”的应用程序中这样做是否足够充分?使用此语法的最佳做法是什么?

4 个答案:

答案 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特定的,我会设法避免它,除非我真的需要它。