我只是实现了一个功能可能另一个函数内部在C定义:嵌套函数最佳实践
void main(){
int foo(){ return 2; };
printf("%d\n", foo());
}
除了是一个巧妙的方法,这个有用的事是,内部函数是私有的外部功能。但是......在“现实世界”应用程序中这样做是否有足够的理由?什么是使用这种语法的最佳实践?
我只是实现了一个功能可能另一个函数内部在C定义:嵌套函数最佳实践
void main(){
int foo(){ return 2; };
printf("%d\n", foo());
}
除了是一个巧妙的方法,这个有用的事是,内部函数是私有的外部功能。但是......在“现实世界”应用程序中这样做是否有足够的理由?什么是使用这种语法的最佳实践?
嵌套函数是一个非标准扩展,implemented by GCC(也许别人认为我不知道关于)。鉴于它不符合标准,最佳实践可能包括而不是将它用于您打算进行移植的代码中。
如果您的最终目标是在C中具有“私有”功能,那么您最好使用单独的文件并将“私有”功能设置为静态,以便它们不会链接到其他目标文件。
还要注意,即使gcc仅支持C,而不是C++。 – 2010-03-19 02:55:00
我觉得这是一个编译器的扩展,而不是C时的参数本身的一部分
见:http://discuss.joelonsoftware.com/default.asp?interview.11.431470.11
如果您正在编写一个将Pascal(允许嵌套过程)转换为C并且依赖GCC将结果转换为二进制文件的编译器,那么此功能当然很有用。
如果我没有记错的话,嵌入式函数可以看到它们的父函数符号。在某些情况下,这可能对避免全局变量有帮助(帮助线程安全?)。由于这个特性是GCC特有的,除非我真的需要它,否则我会尽量避免它。
通过“知名度”你是指访问?在那种情况下,这将是非常具体的,不像其他语义。 – Potatoswatter 2010-03-19 03:02:38
是的,就我所知,嵌入函数具有与函数内其他任何块相同的范围。从以前的评论中的GCC链接中,“嵌套函数可以访问包含函数的所有变量,这些变量在其定义时是可见的,这就是所谓的词法作用域。例如,在这里我们展示了一个嵌套函数,它使用继承变量...“ – joe 2010-03-23 01:54:15
'main'返回'int',而不是'void'。 – 2010-03-18 03:07:53
某人在功能中使用*非常*非标准函数不太可能让人担心主要回报:-) – paxdiablo 2010-03-18 03:50:45
我们可以嵌套多少个关卡? – Lazer 2010-03-18 04:13:56