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