2010-03-18 100 views
2

我只是实现了一个功能可能另一个函数内部在C定义:嵌套函数最佳实践

void main(){ 
    int foo(){ return 2; }; 
    printf("%d\n", foo()); 
} 

除了是一个巧妙的方法,这个有用的事是,内部函数是私有的外部功能。但是......在“现实世界”应用程序中这样做是否有足够的理由?什么是使用这种语法的最佳实践?

+3

'main'返回'int',而不是'void'。 – 2010-03-18 03:07:53

+1

某人在功能中使用*非常*非标准函数不太可能让人担心主要回报:-) – paxdiablo 2010-03-18 03:50:45

+0

我们可以嵌套多少个关卡? – Lazer 2010-03-18 04:13:56

回答

14

嵌套函数是一个非标准扩展,implemented by GCC(也许别人认为我不知道关于)。鉴于它不符合标准,最佳实践可能包括而不是将它用于您打算进行移植的代码中。

如果您的最终目标是在C中具有“私有”功能,那么您最好使用单独的文件并将“私有”功能设置为静态,以便它们不会链接到其他目标文件。

+2

还要注意,即使gcc仅支持C,而不是C++。 – 2010-03-19 02:55:00

1

如果您正在编写一个将Pascal(允许嵌套过程)转换为C并且依赖GCC将结果转换为二进制文件的编译器,那么此功能当然很有用。

0

如果我没有记错的话,嵌入式函数可以看到它们的父函数符号。在某些情况下,这可能对避免全局变量有帮助(帮助线程安全?)。由于这个特性是GCC特有的,除非我真的需要它,否则我会尽量避免它。

+0

通过“知名度”你是指访问?在那种情况下,这将是非常具体的,不像其他语义。 – Potatoswatter 2010-03-19 03:02:38

+0

是的,就我所知,嵌入函数具有与函数内其他任何块相同的范围。从以前的评论中的GCC链接中,“嵌套函数可以访问包含函数的所有变量,这些变量在其定义时是可见的,这就是所谓的词法作用域。例如,在这里我们展示了一个嵌套函数,它使用继承变量...“ – joe 2010-03-23 01:54:15