首页 >后端开发 >C++ >C 的'未定义行为”和'格式错误;无需诊断”之间有什么区别?

C 的'未定义行为”和'格式错误;无需诊断”之间有什么区别?

Barbara Streisand
Barbara Streisand原创
2024-11-21 12:40:16658浏览

What's the Difference Between C  's

未定义行为与格式错误的区别:无需诊断

C 规范定义了各种类型的程序行为,包括未定义、未指定、实现定义、错误,而且格式不正确。虽然一些区别相对清晰,但“格式不正确;无需诊断”一词引起了对其确切含义的质疑。

定义

格式不正确: A违反语法或可诊断语义规则的程序。

未定义的行为:标准对实现操作没有做出任何假设或要求的程序行为。

错误: 标准使用的术语,表示程序格式不正确或参与未定义的行为.

格式良好: 遵循语法和可诊断语义的程序

“格式不正确;无需诊断”的情况

当实现以引入新语法或行为的方式扩展语言时,就会出现这种特定的措辞。根据标准,此类扩展被认为是格式错误的,但允许实现不发出诊断消息。

与未定义行为的区别

这里的关键区别是未定义的行为明确承认程序的错误性质,而“格式错误;无需诊断”是指实现允许违规但未提供明确错误的特定情况

对编译和执行的影响

从技术上讲,格式不正确的程序不应该编译。然而,在“格式错误;无需诊断”的情况下,技术上允许实现静默编译甚至执行程序而不发出警告。

一致性问题

标准的不一致使用围绕错误的术语导致了混乱。术语“错误”意味着需要诊断的错误,但 1.3.13 中的“注释”部分允许实现默默地忽略此类问题。

结论

虽然可能存在细微差别在“格式不正确;不需要诊断”和“未定义的行为”之间,标准的不一致使得很难明确区分。最终,这两个术语都指的是程序行为不可预测并可能导致意外结果的情况。

以上是C 的'未定义行为”和'格式错误;无需诊断”之间有什么区别?的详细内容。更多信息请关注PHP中文网其他相关文章!

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