C 中Main 的遞歸調用:進入未定義領域的旅程
下面呈現的令人困惑的代碼片段激發了編程社區的好奇:
int main () { return main(); }
令許多人驚訝的是,這段程式碼編譯成功。然而,它的執行揭示了一個有趣的行為:它無限期地運行。這種奇特的觀察引發了人們對底層機制的疑問。
呼叫Main 的困境
C 標準在[basic.start.main] p3 中明確聲明「函數main 不應由表達式命名。」這種禁止源自於main 作為程式入口點的性質,運行時函式庫呼叫一次。不允許對 main 進行任何後續調用,因此缺少命名表達式。
編譯器行為和未定義行為
根據 [intro.compliance.general],編譯器的職責是從格式良好的程式產生可執行程式碼。雖然它可能會提供警告或錯誤,但並不需要強制執行所有規則。在這種特殊情況下,編譯器可以自行決定對呼叫 main 的違規行為做出不同的反應。
擁抱未知
最終,對此行為的決定性判決代碼片段屬於未定義行為的範圍。根據標準的定義,當發生未定義的行為時,任何事情都可能發生。試圖合理化此類結果是徒勞無功的,因為後果是完全不可預測的。
總之,雖然所提供程式碼的語法有效,但其執行會導致未定義的行為。最好注意標準禁止命名表達式呼叫 main 的規定,以免您的程式踏上不可預測的未知旅程。
以上是為什麼在 C 中遞歸呼叫'main()”會導致未定義的行為?的詳細內容。更多資訊請關注PHP中文網其他相關文章!