c - C 中的嵌套函数有什么用处?

标签 c nested-function

我在某处读到,嵌套函数在 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/

相关文章:

c - 为什么 char *str = "anything"的大小总是 8?

c - 查找二维圆锥形状的网格点

c - for (unsigned char i = 0; i<=0xff; i++) 产生无限循环

r - 将相同的参数传递给多个嵌套函数

Scala 返回函数 : multiple nested functions

c - 嵌套函数的实现

c++ - Makefile 与 OpenMP : cannot specify -o with -c, -S 或 -E 与多个文件

c - 指针指针问题

javascript - 在 Javascript 中等待来自 JQuery $.each 中的异步嵌套函数的数据

php - PHP 嵌套函数有什么用?