c++ - C 中的嵌套函数?

标签 c++ c

谁能告诉我我们可以在用户定义的函数中声明一个函数吗?比如

int sum(int x, int y)
{
    int fun( float x);
}

我们可以在函数内部定义一个函数吗?据我所知,我们不能在函数内部定义函数。

但我只是这样做了,它的工作正常,代码如下:

{
    int main()
    { 
        func1();
        return 0;
    }
    func1()
    {
        int i = 0;
        auto func2()
        {
            i = 10;
            printf("Heloo i am func 2\n");
        }
        printf("Heloo i am func 1\n");
        func2();
    }
}

效果很好。

现在有人能告诉我函数内部的函数是如何定义或正常工作的吗?

任何人都可以向我解释为什么代码有效吗?

现在,当我更改几行代码时,出现了以下问题 变化如下:

代码:

{
    func1()
    {
        func2();
        int i = 0;
        auto func2()
        {
            i = 10;
            printf("Heloo i am func 2\n");
        }
        printf("Heloo i am func 1\n");
    }

错误:

error: static declaration of ‘func2’ follows non-static declaration
note: previous implicit declaration of ‘func2’ was here

现在这些错误是什么,为什么会出现?

如果我在 main 函数中调用 func2() ,它会显示如下错误 对 func2 的 undefined reference

现在谁能告诉我这里出了什么问题?

最佳答案

C 标准允许在函数内声明函数(如您的第一个代码片段),但不允许在函数内定义函数(尽管某些编译器可能提供它作为一个非标准的扩展)。

对于 C++ 也是如此,尽管较新的版本(C++0x 等)允许您定义匿名 lambda 函数。但这是不同的东西。

关于c++ - C 中的嵌套函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6095826/

相关文章:

c++ - 在构建过程中是否可以在没有可执行文件的情况下对 dll 的方法执行单元测试?

c++ - 将 OpenCV BGR 8 位图像转换为 CIE L*a*b*

c - 如何在gstreamer中录制音频和视频

c - getopt:无法识别缺少的参数 ' : ' 和无效的参数 ' ? '

java - 从 java : Why doesn't the array get printed? 传递的 c 中打印数组

c - 内核 read_lock 后跟 write_lock 提供软锁定

c++ - 无法让 OpenGL 中的 Gouraud Shading 工作

c++ - 以Java方式定义C++类

c++ - 提取两个词之间的域

c - 在 C 中通过 Zeromq 重定向标准输出