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