在 C 中递归调用 Main 函数
提供的代码片段尝试在 C 中在其自身内部递归调用 main() 函数。然而,需要注意的是,这种行为在严格的 C 合规性中是不允许的。
C 中允许递归调用 main() 吗?
根据 C 标准,函数不能直接调用自身,包括main()函数。此限制旨在防止无限递归并保证程序终止。
g 的实际实现
尽管有语言标准,但在实践中递归调用 main() 是可能的使用 GNU C 编译器 (g )。 g 在这方面并没有严格执行标准,允许使用递归 main() 调用的代码进行编译和执行。
示例代码
以下修改后的代码片段演示使用 g 的递归 main() 调用:
#include
#include
using namespace std;
int main() {
int y = rand() % 10; // returns 3, then 6, then 7
cout 编译并执行时,此代码将生成以下输出:
y = 3
y = 6
y = 7
汇编分析
检查为此代码生成的汇编表明 g 将递归 main() 调用视为任何其他函数调用:
main:
...
cmpl $7, -12(%rbp)
je .L7
call main
...
.L7:
...
leave
ret
注意:
虽然 g 可以实现这种行为,但重要的是要注意它不能保证。其他编译器可能严格遵守 C 标准,从而导致编译错误或意外行为。因此,不建议使用递归 main() 调用。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3