没有副作用的无限循环在 C 11 标准中被明确视为未定义行为 (UB)。考虑以下程序:
<code class="cpp">int main() { while (true) {} }</code>
这个程序是 UB,因为它不执行任何有意义的操作,并且可以无限期地继续运行。
现在,让我们考虑一个递归程序:
<code class="cpp">void foo() { foo(); } int main() { foo(); }</code>
这个程序也是 UB 吗?
标准指出(1.10p24):
实现可能假设任何线程最终都会执行以下操作之一:
- 终止
- 调用库 I/O 函数
- 访问或修改易失性对象,或者
- 执行同步操作或原子操作。
这适用于无限循环和递归。
尽管如此,如果递归超出了嵌套递归函数调用的实现限制,它仍然可能导致未定义的行为。一直都是这样。
以上是以下是一些标题选项,请记住问题结构和文章的重点: **选项 1(直接且集中):** * **C 中的递归是未定义的行为吗?** **选项 2(强调的详细内容。更多信息请关注PHP中文网其他相关文章!