首页  >  文章  >  后端开发  >  尽管标准禁止,g 仍可以在 C 中递归调用“main()”吗?

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

Susan Sarandon
Susan Sarandon原创
2024-10-31 20:26:29661浏览

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

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