这个包含函数的C函数有什么问题?

时间:2012-03-12 19:18:49

标签: c recursion

我的教授向我们展示了这段代码:

timerX(int x){

     int times(int y){
          return x * y;
     }
     return times;

}

这在C中是如何工作的(使用GCC编译器)?他说,一旦函数消失,内部函数就会消失?我感谢任何提示或建议。

2 个答案:

答案 0 :(得分:7)

它被称为nested function, a GNU extension。基本上

  • 内部函数可以访问外部函数的局部变量(在其外观之前声明的那些)

  • 内部函数只能通过函数poinyers从外部调用,但如果内部函数从其父函数访问对象,则不能在包含函数终止后调用

在您的示例中,从外部调用该函数指针可能是非法的。

  

如果您尝试通过其地址后调用嵌套函数   包含功能已退出,所有地狱都会破裂。

答案 1 :(得分:3)

我很确定它的工作方式和其他任何函数一样,只是它只对封闭函数可见。

换句话说,它只与功能的可见性或可访问性有关,而不是其他任何内容。