我在某处读到,嵌套函数在 C 中是允许的(至少 GNU 编译器允许)。考虑以下代码:
/* nestedfunc.c */
#include <stdlib.h> /* for atoi(3) */
#include <stdio.h>
int F (int q)
{
int G (int r)
{
return (q + r);
}
return (G (5));
}
int main (int argc, const char* argv[])
{
int q = 0;
if (argc > 1)
{
q = atoi (argv[1]);
}
printf ("%d\n", F (q));
return 0;
}
编译并运行:
gcc -o nestedfunc -O2 -s -Wall nestedfunc.c
me@mybox:~/college/c++/other stuff$ ./nestedfunc 8
13
me@mybox:~/college/c++/other stuff$
我还了解到其他一些编程语言也支持这些。我的问题是:嵌套函数有什么用处?提前致谢。
最佳答案
嵌套函数可以访问外部函数的局部变量。有点像闭包,您可以获取指向嵌套函数的指针并将该指针传递给其他函数,并且嵌套函数将可以访问当前调用的局部变量(如果此调用已经返回,则会发生不好的事情)。因为 C 运行时系统不是为此设计的,所以函数指针通常只是指向函数第一条指令的指针,而指向嵌套函数的指针只能通过在堆栈上编写一些代码并将指针传递给该代码来完成。从安全角度来看,这是一个坏主意。
如果您想使用嵌套函数,请使用具有适当支持它们的运行时系统的语言。要在 C 中实现类似的结果,请将“外部函数的局部变量”放入上下文结构中并手动传递它。
关于c - C 中的嵌套函数有什么用处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4293941/