首頁 > 後端開發 > C++ > 主體

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

Linda Hamilton
發布: 2024-10-26 12:19:02
原創
963 人瀏覽過

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!