首页 >后端开发 >C++ >C 语言中 main() 函数可以调用自身吗?

C 语言中 main() 函数可以调用自身吗?

Susan Sarandon
Susan Sarandon原创
2024-11-03 00:09:021020浏览

Can the main() function call itself in C  ?

main() 函数中的递归:意外的编译器行为

C 中通常不允许调用 main() 函数。然而,实际上,在某些平台上是可能的,特别是在带有 g 编译器的 Linux 系统上。让我们深入研究一下这种行为是如何实现的。

在提供的代码示例中:

<code class="cpp">#include <iostream>
#include <cstdlib>

int main() {
    cout <p>main() 函数中对 main() 的调用允许无限循环。然而,这不是标准的 C 行为。</p>
<p><strong>编译器魔术或未定义行为?</strong></p>
<p>是否可以使用魔术变量或宏来获取当前正在运行的函数?不,C 标准中没有这样的规定。</p>
<p><strong>Linux 编译器异常</strong></p>
<p>尽管标准禁止,Linux g 编译器仍使用 main() 调用来编译代码main() 不会引发错误。这是由于编译器对 C 标准的宽松解释。</p>
<p><strong>实际演示</strong></p>
<p>考虑以下代码:</p>
<pre class="brush:php;toolbar:false"><code class="cpp">#include <cstdlib>
#include <iostream>
using namespace std;
int main()
{
    int y = rand() % 10; // returns 3, then 6, then 7
    cout <p>当使用g ,此代码生成如下所示的汇编代码:</p>
<pre class="brush:php;toolbar:false"><code class="assembly">main:
        ...
        cmpl    , -12(%rbp)
        je      .L7
        call    main
        ...
.L7:
        ...
        leave
        ret</code>

在此汇编代码中, main 的调用就像任何其他函数一样。 main() 函数中对 main() 的调用被翻译为常规函数调用。

结论

从 main() 内部调用 main() 是尽管 C 标准不允许,但在具有容忍此类行为的特定编译器的某些平台上可能会这样做。但需要强调的是,这不是标准 C,在不同环境或编译器版本中可能会导致意外结果。

以上是C 语言中 main() 函数可以调用自身吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

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