c - GCC 的递归和 `static` 关键字

标签 c gcc recursion static

我最近读了几个声明为static的递归函数。

在函数声明前添加static 是否有助于GCC 优化尾递归函数?这是获得优化所必需的吗?

最佳答案

我看不出有任何理由可以让static 函数特别有助于编译器优化递归调用。

马上,您所看到的递归函数听起来更有可能只是编译单元内部的。递归函数经常需要一个比想要向程序的其余部分公开的接口(interface)更丰富的接口(interface)——例如,可能有额外的参数仅供递归调用使用,或者来自的返回值可能需要调整一般调用,以适应想要呈现给其余代码的抽象。因此,通常编写一个包装函数来为额外参数设置默认值,并通常将递归函数的接口(interface)调整为对外部有意义的好东西。

既然递归函数只被它自己和包装函数调用,那么声明它是很自然的 static -- 不是因为递归本身,而是为了防止污染全局命名空间用它。编译器也有可能对静态函数使用更有效的调用约定(适应特定的函数体),因为它知道所有的调用点并且不必遵循让单独编译的代码调用它的 ABI。

关于c - GCC 的递归和 `static` 关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13111091/

相关文章:

c++ - 使用引用和取消引用运算符读取代码行时遇到问题

c - 使用 Flex/Bison 的解释器的 REPL

c - C 中的枚举/类似字典的工具?

c - pragma weak 的支持有多广泛,它是否克服了使用 gcc 属性的问题?

我可以修改gcc内联汇编中的输入操作数吗

c++ - gcc/clang 在基本结构的后填充中布置派生结构的字段

algorithm - 二叉树递归层序遍历的时间复杂度是多少

c - UNIX 域套接字在 close() 后未关闭

javascript - 递归返回对象数组和嵌套对象键

java - 调试我的递归斐波那契 Java 代码并更正逻辑