首页  >  文章  >  后端开发  >  ## C 中的无限递归是否被视为未定义行为?

## C 中的无限递归是否被视为未定义行为?

Susan Sarandon
Susan Sarandon原创
2024-10-26 18:47:03535浏览

##  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