首頁  >  文章  >  後端開發  >  儘管標準禁止,g 仍可以在 C 中遞歸呼叫“main()”嗎?

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

Susan Sarandon
Susan Sarandon原創
2024-10-31 20:26:29661瀏覽

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn