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

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

Susan Sarandon
发布: 2024-11-03 00:09:02
原创
965 人浏览过

Can the main() function call itself in C  ?

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

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

在提供的代码示例中:

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

int main() {
    cout << "!!!Hello World!!!" << endl;
    system("pause");
    return main();
}</code>
登录后复制

main() 函数中对 main() 的调用允许无限循环。然而,这不是标准的 C 行为。

编译器魔术或未定义行为?

是否可以使用魔术变量或宏来获取当前正在运行的函数?不,C 标准中没有这样的规定。

Linux 编译器异常

尽管标准禁止,Linux g 编译器仍使用 main() 调用来编译代码main() 不会引发错误。这是由于编译器对 C 标准的宽松解释。

实际演示

考虑以下代码:

<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>
登录后复制

当使用g ,此代码生成如下所示的汇编代码:

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板