沒有副作用的無限循環在 C 11 標準中被明確視為未定義行為 (UB)。考慮以下程序:
<code class="cpp">int main() { while (true) {} }</code>
這個程式是 UB,因為它不執行任何有意義的操作,並且可以無限期地繼續運行。
現在,讓我們考慮一個遞歸程序:
<code class="cpp">void foo() { foo(); } int main() { foo(); }</code>
這個程式也是 UB 嗎?
標準指出(1.10p24):
實作可能假設任何執行緒最終都會執行下列操作之一:
- 終止
- 呼叫庫I/O 函數
- 存取或修改易失性對象,或
- 執行同步操作或原子操作。
這適用於無限循環和遞歸。
儘管如此,如果遞歸超出了巢狀遞歸函數呼叫的實作限制,它仍然可能導致未定義的行為。一直都是這樣。
以上是以下是一些標題選項,請記住問題結構和文章的重點: **選項 1(直接且集中):** * **C 中的遞歸是未定義的行為嗎? **選項 2(強調的詳細內容。更多資訊請關注PHP中文網其他相關文章!