gpt4 book ai didi

c - 为什么 C 标准不支持嵌套函数?

转载 作者:太空狗 更新时间:2023-10-29 16:36:56 24 4
gpt4 key购买 nike

在汇编中实现似乎并不难。

gcc 也有一个标志 (-fnested-functions) 来启用它们。

最佳答案

事实证明,它们实际上并不是那么容易正确实现。

内部函数是否应该访问包含作用域的变量?如果不是,嵌套它就没有意义;只需将其设置为静态(以限制它所在的翻译单元的可见性)并添加一条注释,说明“这是一个仅由 myfunc() 使用的辅助函数”。

但是,如果您想要访问包含作用域的变量,您基本上是在强制它生成闭包(另一种方法是限制您可以对嵌套函数执行的操作,足以使它们变得无用)。我认为 GCC 实际上通过为包含函数的每次调用生成(在运行时)一个唯一的 thunk 来处理这个问题,它设置一个上下文指针,然后调用嵌套函数。这最终成为一个相当棘手的 hack,一些完全合理的实现无法做到的事情(例如,在禁止执行可写内存的系统上 - 许多现代操作系统出于安全原因这样做)。使它在一般情况下工作的唯一合理方法是强制所有函数指针携带一个隐藏的上下文参数,并且所有函数都接受它(因为在一般情况下你不知道什么时候调用它是闭包还是一个未闭合的函数)。出于技术和文化原因,这在 C 中是不合适的,因此我们只能选择使用显式上下文指针来伪造闭包而不是嵌套函数,或者使用具有所需基础结构的高级语言正确地做。

关于c - 为什么 C 标准不支持嵌套函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1348095/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com