首页 > 后端开发 > C++ > 正文

尽管标准禁止,g 仍可以在 C 中递归调用'main()”吗?

Susan Sarandon
发布: 2024-10-31 20:26:29
原创
658 人浏览过

Can g   Recursively Call `main()` in C   Despite the Standard Forbidding It?

在 C 中递归调用 main()

C 标准规定不允许递归调用 main()。但是,g 编译器允许这种做法,允许使用不寻常的代码,例如:

<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();
}
登录后复制

执行时:

> g++ g.cpp; ./a.out
y = 3
y = 6
y = 7</code>
登录后复制

检查汇编代码表明 main 的调用方式与任何其他函数类似:

<code class="assembly">main:
        ...
        cmpl    , -12(%rbp)
        je      .L7
        call    main
        ...
.L7:
        ...
        leave
        ret</code>
登录后复制

虽然这种行为尚未标准化,但 g 似乎对执行该标准采取了宽松的方式,这一点从其缺乏反对意见就可见一斑。然而,当使用 -pedantic 标志时,它会发出讽刺性警告:

g.cpp:8: error: ISO C++ forbids taking address of function '::main'
登录后复制

以上是尽管标准禁止,g 仍可以在 C 中递归调用'main()”吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!