首页 > 后端开发 > 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.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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!