首頁  >  文章  >  後端開發  >  ## C 中的無限遞歸是否被視為未定義行為?

## C 中的無限遞歸是否被視為未定義行為?

Susan Sarandon
Susan Sarandon原創
2024-10-26 18:47:03608瀏覽

##  Is Infinite Recursion in C   Considered Undefined Behavior?

無限遞歸是未定義行為(UB)嗎?

在C程式設計領域,無限遞歸是否構成未定義行為的問題( UB)一直是爭論的話題。雖然涉及循環的某些場景已被識別為 UB,但仍不確定無限遞歸本身是否屬於此分類。

在C 11 中,考慮包含無限循環且無副作用的程序,如下所示UB:

<code class="cpp">int main() {
   while (true) {}
}</code>

這在C 標準中記錄為1.10p24:「實作可能假設任何執行緒最終都會執行以下操作之一:終止、呼叫庫I/O 函數、存取或修改易失性對象,或執行同步操作或原子操作。它被認為是UB。

接下來的問題是,以下涉及無限遞歸的程序是否也構成UB:

<code class="cpp">void foo() {
   foo();
}

int main() {
   foo();
}</code>

雖然上述程序可以直觀地假設為UB,但該標準並未明確解決這一特定場景。 1.10p24中的相關段落指的是循環,而不是遞歸。

但是值得注意的是,過多的遞歸會導致巢狀遞歸函數呼叫次數超出實現限制。情況一直如此,並且可能導致未定義的行為,無論遞歸本身的 UB 分類如何。

以上是## C 中的無限遞歸是否被視為未定義行為?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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