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