【问题标题】:Are nested functions part of C standard?嵌套函数是 C 标准的一部分吗?
【发布时间】:2009-03-20 15:17:42
【问题描述】:

今天我遇到了我从未听说过的嵌套函数。它只是 GNU C 的一部分吗?

这是嵌套函数的维基百科示例。

float E(float x)
{
    float F(float y)
    {
        return x + y;
    }
    return F(3);
}

从代码看来,嵌套函数是一种 C++ 内联函数。那么,是否可以取出嵌套函数的地址呢?

编辑:

Adam 给出的 gcc 链接说嵌套函数的代码是在堆栈上动态创建的。但是如何从堆栈运行代码?它不应该在代码段中。

【问题讨论】:

标签: c


【解决方案1】:

不,它们不是 C 或 C++ 标准的一部分。它们是 GCC 编译器中的 GNU 扩展。有关更多信息,请参阅GCC manual。实际上可以获取嵌套函数的地址,这是使用称为 trampolines 的技术完成的,但请注意手册中列出的注意事项。

【讨论】:

    【解决方案2】:

    嵌套函数是GCC extension,不是标准的C

    【讨论】:

      猜你喜欢
      • 2011-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-02
      • 2021-12-11
      • 1970-01-01
      • 1970-01-01
      • 2016-07-29
      相关资源
      最近更新 更多