一些程序员认为在另一个函数内部定义一个函数称为“嵌套函数”。但是现实是它不是嵌套函数,它被视为词汇作用域。在C语言中,词法作用域无效,因为编译器无法达到/找到内部函数的正确内存位置。
C不支持嵌套函数,因为我们无法在C中的另一个函数内定义一个函数。我们可以在一个函数内声明一个函数,但它不是嵌套函数。
由于嵌套函数定义无法访问周围块的局部变量,因此它们只能访问包含模块的全局变量。这样做是为了不必在目录中查找全局变量。与C中一样,有两个嵌套作用域:本地和全局(除此之外,内置函数)。因此,嵌套函数只有有限的用途。如果尝试在C中使用嵌套函数,则将得到编译时错误。
输出:
编译时错误:未定义对“视图”的引用
GNU C编译器的扩展允许声明嵌套函数。在GCC扩展名下的嵌套函数的声明需要以auto关键字为前缀/开头。
另外,gcc主要通过Trampoline实现函数嵌套功能,那么什么是Trampoline呢?
Trampolin