首页 >后端开发 >C++ >## C 11 中的无界递归是否属于未定义行为?

## C 11 中的无界递归是否属于未定义行为?

Patricia Arquette
Patricia Arquette原创
2024-10-26 00:59:02706浏览

## Does Unbounded Recursion in C  11 Qualify as Undefined Behavior?

无界递归是不定行为吗?

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

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

此行为由 C 标准规定,该标准规定实现可以假设任何线程最终都会终止、执行 I/O 操作、访问/修改易失性对象或执行同步或原子操作。

问题来了:这个定义是否也适用于无界递归,如以下代码所示:

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

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

根据 C 标准,两者的行为程序是未定义的,因为它们都不执行非 UB 标准定义中指定的任何操作。

但是,需要注意的是,即使 C 标准没有考虑无界递归 UB,它仍然可以如果递归超出了嵌套递归函数调用数量的实现限制,则表现出未定义的行为。情况一直如此,并且无论循环在 C 标准下的 UB 状态如何,它仍然是正确的。

以上是## C 11 中的无界递归是否属于未定义行为?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn