首页 >后端开发 >C++ >C 的 `main()` 函数可以递归吗?

C 的 `main()` 函数可以递归吗?

Linda Hamilton
Linda Hamilton原创
2024-11-28 22:54:14273浏览

Can C  's `main()` Function Be Recursive?

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn