嵌套函数

时间:2010-06-05 12:11:13

标签: c function nested

  1. 我刚认为ANSI(ISO)不允许嵌套功能.. 我想知道是什么让gnu c ito实现这个功能(为什么会出现这种需要)。

  2. 如果函数说(a())在另一个函数中定义,则说(b())然后 a()的生命周期是整个程序吗?

  3. 是否会在分配给函数b()的堆栈中创建()ll的存储空间。?

2 个答案:

答案 0 :(得分:1)

1)非常主观。不是线索。 : - )

2)不,内部函数的生命周期限于外部函数的寿命。请参阅GCC documentation on nested functions。如果你保留一个指向内部函数的指针并在外部函数返回后调用它,那么可能会发生坏事。

3)内部函数分配自己的堆栈空间,就像任何其他函数一样。它必须分配自己的空间以支持递归调用。

答案 1 :(得分:1)

我相信http://en.wikipedia.org/wiki/Nested_function可以回答你问题#1的大部分内容。问题#2在http://gcc.gnu.org/onlinedocs/gcc/Nested-Functions.htmlhttp://gcc.gnu.org/onlinedocs/gccint/Trampolines.html中的问题#3中有更详细的说明。

编辑(旁白)维基百科文章莫名其妙地将 PL / M 从其支持嵌套函数的基于ALGOL的语言列表中删除。啊,过去的美好时光。