嵌套函数是C标准的一部分吗?

时间:2009-03-20 15:17:42

标签: c

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

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

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

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

编辑:

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

2 个答案:

答案 0 :(得分:12)

不,它们不是C或C ++标准的一部分。它们是GCC编译器中的GNU扩展。有关详细信息,请参阅GCC manual。实际上可以采用嵌套函数的地址,这是使用一种名为trampolines的技术完成的,但要注意手册中列出的警告。

答案 1 :(得分:1)

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