C 標準將 main 函數定義為每個程式的基本入口點。然而,問題出現了:「從內部呼叫 main() 是否可行?」
根據 C 標準,不行。主函數一旦定義並執行,就標誌著程式的開始和結束。遞歸呼叫 main() 違反了這項基本原則。
然而,在實作中,某些編譯器(如 Linux 的 g)允許在 main() 中非常規地呼叫 main()。標準並未明確支援此行為,但編譯器的實作允許此行為。
例如,考慮以下程式碼:
<code class="c++">#include <iostream> #include <cstdlib> using namespace std; int main() { int y = rand() % 10; // random number generation cout << "y = " << y << endl; return (y == 7) ? 0 : main(); }</code>
此程式碼執行隨機數生成,並且如果生成的數字不等於 7,它遞歸呼叫 main()。
檢查g 產生的組譯程式碼發現main() 的呼叫就像其他函數一樣:
<code class="assembly">main: ... cmpl , -12(%rbp) je .L7 call main ... .L7: ... leave ret</code>
值得注意的是,雖然g編譯這樣的程式碼,它會產生一個帶有-pedantic 標誌的警告,提醒您它違反了C標準:
g.cpp:8: error: ISO C++ forbids taking address of function '::main'
雖然在其內部呼叫main() 在某些情況下可能有效,但它並未得到C 標準的正式認可。這違反了標準行為,可能會導致不同編譯器和平台上出現未定義的結果。因此,強烈建議不要在生產程式碼中依賴這種非常規做法。
以上是你能在 C 中遞歸呼叫 main() 嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!