C 的 main() 函数中的递归限制
在 C 中,main() 函数中递归的使用一直是辩论的主题。许多开发人员观察到,GNU 编译器集合 (g ) 允许 main() 中的递归,尽管 C 标准中据称禁止这样做。
标准限制
根据C 标准 (3.6.1/3),main() 中的递归是明确的禁止:
“程序中不得使用 main 函数 (3.2)。”
“已使用”的定义
该标准还将“used”定义为对象或非重载函数:
“如果其对象或非重载函数被使用,则使用该对象或非重载函数name 出现在潜在评估的表达式中。”
因此,从内部调用 main() 构成“使用”,因此根据标准是不允许的。
编译器行为
尽管标准禁止,g 编译以下代码时没有错误:
int main() { main(); }
出现此差异是因为 g 的默认优化级别包括小于预配置阈值的内联函数。由于此代码中的递归是单个函数调用,因此它可能会低于阈值并由 g 内联。
结论
虽然 g 可能允许 main 中的递归() 在某些情况下,C 标准严格禁止这样做。开发者应遵守标准的要求,以确保程序的正确性和潜在的陷阱。
以上是C 的 `main()` 函数可以递归吗?的详细内容。更多信息请关注PHP中文网其他相关文章!