首頁 > 後端開發 > C++ > C 中允許遞歸呼叫'main()”嗎?

C 中允許遞歸呼叫'main()”嗎?

Barbara Streisand
發布: 2024-11-02 19:23:02
原創
297 人瀏覽過

Is Recursively Calling `main()` Allowed in C  ?

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板