首页  >  文章  >  后端开发  >  ## 无副作用的递归是 C 中的未定义行为吗?

## 无副作用的递归是 C 中的未定义行为吗?

Linda Hamilton
Linda Hamilton原创
2024-10-26 12:19:02964浏览

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

没有副作用的递归是未定义行为吗?

在 C 11 中,没有副作用的无限循环(如下所示)被视为未定义行为 (UB):

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

由于 ISO C 11 标准 (1.10p24) 中的一项规定,该行为是 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