首页  >  文章  >  后端开发  >  C 中允许递归调用'main()”吗?

C 中允许递归调用'main()”吗?

Barbara Streisand
Barbara Streisand原创
2024-11-02 19:23:02286浏览

Is Recursively Calling `main()` Allowed in C  ?

在 C 中递归调用 Main 函数

提供的代码片段尝试在 C 中递归调用 main() 函数。但是,需要注意的是,这种行为在严格的 C 规范中是不允许的。

C 中允许递归调用 main() 吗?

根据 C 标准,函数不能直接调用自身,包括main()函数。此限制旨在防止无限递归并保证程序终止。

g 的实际实现

尽管有语言标准,但在实践中递归调用 main() 是可能的使用 GNU C 编译器 (g )。 g 在这方面并没有严格执行标准,允许使用递归 main() 调用的代码进行编译和执行。

示例代码

以下修改后的代码片段演示使用 g 的递归 main() 调用:

<code class="cpp">#include <cstdlib>
#include <iostream>
using namespace std;

int main() {
    int y = rand() % 10; // returns 3, then 6, then 7
    cout << "y = " << y << endl;
    return (y == 7) ? 0 : main();
}</code>

编译并执行时,此代码将生成以下输出:

y = 3
y = 6
y = 7

汇编分析

检查为此代码生成的程序集,发现 g 将递归 main() 调用视为任何其他函数调用:

main:
        ...
        cmpl    , -12(%rbp)
        je      .L7
        call    main
        ...
.L7:
        ...
        leave
        ret

注意:

而这种行为对于 g 是可能的,重要的是要注意它不能得到保证。其他编译器可能严格遵守 C 标准,从而导致编译错误或意外行为。因此,不推荐使用递归 main() 调用。

以上是C 中允许递归调用'main()”吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

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