首頁 > 後端開發 > C++ > 主體

儘管標準禁止,g 仍可以在 C 中遞歸呼叫'main()”嗎?

Susan Sarandon
發布: 2024-10-31 20:26:29
原創
660 人瀏覽過

Can g   Recursively Call `main()` in C   Despite the Standard Forbidding It?

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!