在 C 中遞歸呼叫 Main 函數
提供的程式碼片段嘗試在 C 中遞歸呼叫 main() 函數。但是,需要注意的是,這種行為在嚴格的 C 規範中是不被允許的。
C 中允許遞歸呼叫 main() 嗎?
根據 C 標準,函數不能直接呼叫自身,包括main()函數。此限制旨在防止無限遞歸並保證程式終止。
g 的實際實作
儘管有語言標準,但在實作中遞歸呼叫 main() 是可能的使用 GNU C 編譯器 (g )。 g 在這方面並沒有嚴格執行標準,允許使用遞歸 main() 呼叫的程式碼進行編譯和執行。
範例程式碼
以下修改後的程式碼片段示範使用 g 的遞歸 main()呼叫:
<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(); }</code>
編譯並執行時,此程式碼將產生以下輸出:
y = 3 y = 6 y = 7
彙編分析
檢查為此程式碼產生的程序集,發現g 將遞歸main()呼叫視為任何其他函數呼叫:
main: ... cmpl , -12(%rbp) je .L7 call main ... .L7: ... leave ret
注意:
而這種行為對於g 是可能的,重要的是要注意它不能得到保證。其他編譯器可能嚴格遵守 C 標準,導致編譯錯誤或意外行為。因此,不建議使用遞歸 main() 呼叫。
以上是C 中允許遞歸呼叫'main()”嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!