在 C 中遞歸調用 Main 函數
提供的程式碼片段嘗試在 C 中在其自身內部遞歸調用 main() 函數。然而,需要注意的是,這種行為在嚴格的 C 合規性中是不允許的。
C 中允許遞歸呼叫 main() 嗎?
根據 C 標準,函數不能直接呼叫自身,包括main()函數。此限制旨在防止無限遞歸並保證程式終止。
g 的實際實作
儘管有語言標準,但在實務上遞歸呼叫 main() 是可能的使用 GNU C 編譯器 (g )。 g 在這方面並沒有嚴格執行標準,允許使用遞歸 main() 呼叫的程式碼進行編譯和執行。
範例程式碼
以下修改後的程式碼片段示範使用 g 的遞迴 main() 呼叫:
#include
#include
using namespace std;
int main() {
int y = rand() % 10; // returns 3, then 6, then 7
cout 編譯並執行時,此程式碼將產生以下輸出:
y = 3
y = 6
y = 7
彙編分析
檢查為此程式碼產生的彙編表明g 將遞歸main() 呼叫視為任何其他函數呼叫:
main:
...
cmpl $7, -12(%rbp)
je .L7
call main
...
.L7:
...
leave
ret
注意:
雖然 g 可以實現這種行為,但重要的是要注意它不能保證。其他編譯器可能嚴格遵守 C 標準,導致編譯錯誤或意外行為。因此,不建議使用遞歸 main() 呼叫。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3