首页 > 后端开发 > C++ > 为什么递归调用 `main()` 会导致 C 中未定义的行为?

为什么递归调用 `main()` 会导致 C 中未定义的行为?

Patricia Arquette
发布: 2024-12-13 02:25:10
原创
1023 人浏览过

Why Does Recursively Calling `main()` Lead to Undefined Behavior in C  ?

调用 main 来调用 main:一个未定义的任务

下面的代码片段引起了程序员的疑问:

int main () { 
    return main(); 
}
登录后复制

编译没有错误但无法终止执行,导致对其行为的猜测。

未定义的行为: main之谜

根据C标准,[basic.start.main](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018 /p0689r2.html#3.6.1) 指出“函数 main 不应由表达式命名。”这意味着禁止在程序中调用 main。

编译器行为:警告还是沉默?

编译器可能会以不同的方式处理这种特定情况。启用 -pedantic 选项的 GCC 会发出有关非法使用 main 的警告。然而,Visual Studio 保持沉默,选择不警告代码的递归性质。

调用 main 时会发生什么?

这个问题的答案属于未定义行为的范围。该标准没有定义在程序中调用 main 时会发生什么。因此,任何观察到的行为都是不可预测的并且依赖于实现。

结论

在程序中调用 main 是一个未定义的操作,并且无法可靠地预测其行为。编译器可能会以不同的方式处理这种情况,发出警告或完全编译失败。试图定义未定义行为的结果是徒劳的,并且可能会导致意想不到的和潜在危险的结果。

以上是为什么递归调用 `main()` 会导致 C 中未定义的行为?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板