首頁  >  文章  >  後端開發  >  ## 無副作用的遞歸是 C 中的未定義行為嗎?

## 無副作用的遞歸是 C 中的未定義行為嗎?

Linda Hamilton
Linda Hamilton原創
2024-10-26 12:19:021000瀏覽

## Is Recursion Without Side Effects Undefined Behavior in C  ?

沒有副作用的遞歸是未定義行為嗎?

在C 11 中,沒有副作用的無限循環(如下所示)被視為未定義行為(UB):

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

由於ISO C 11 標準(1.10 p24) 中的一項規定,該行為是UB,該規定規定:

The implementation may assume that any thread will eventually do one of the following:
 - terminate, 
 - make a call to a library I/O function, 
 - access or modify a volatile object, or 
 - perform a synchronization operation or an atomic operation.

此規定適用於循環示例和以下遞歸程序:

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

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

在這個遞歸程序中,沒有副作用,但它也被認為是UB,因為它違反了任何線程最終都會執行列出的操作之一的假設在1.10p24 中。

請注意,即使不存在此規定,如果遞歸超出了巢狀遞歸函數呼叫的實作定義限制,遞迴仍然可能表現出未定義的行為。無論版本如何,C 中始終如此。

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

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