📜  C中的嵌套函数

📅  最后修改于: 2021-05-25 20:57:14             🧑  作者: Mango

一些程序员认为在另一个函数中定义一个函数称为“嵌套函数”。但是实际情况是它不是一个嵌套函数,它被视为词汇作用域。词法作用域在C中无效,因为编译器无法达到/找到内部函数的正确内存位置。

嵌套函数被C支持,因为我们不能在C.我们可以声明函数内部函数的其他函数中定义一个函数,但它不是一个嵌套函数。
由于嵌套函数定义无法访问周围块的局部变量,因此它们只能访问包含模块的全局变量。这样做是为了不必在目录中遍历全局变量。像在C中一样,有两个嵌套作用域:局部作用域和全局作用域(除此之外,是内置的)。因此,嵌套函数只有有限的用途。如果尝试在C中使用嵌套函数,则将得到编译时错误。

// C program to illustrate the
// concept of Nested function.
#include 
int main(void)
{
    printf("Main");
    int fun()
    {
        printf("fun");
  
        // defining view() function inside fun() function.
        int view()
        {
            printf("view");
        }
        return 1;
    }
    view();
}

输出:

Compile time error: undefined reference to `view'

GNU C编译器的扩展允许声明嵌套函数。在GCC扩展名下的嵌套函数的声明需要以auto关键字为前缀/开头。

// C program of nested function
// with the help of gcc extension
#include 
int main(void)
{
    auto int view(); // declare function with auto keyword
    view(); // calling function
    printf("Main\n");
  
    int view()
    {
        printf("View\n");
        return 1;
    }
  
    printf("GEEKS");
    return 0;
}

输出:

view
Main
GEEKS
想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。