首页 >后端开发 >C++ >未定义的行为与'格式不正确,无需诊断”:有什么区别?

未定义的行为与'格式不正确,无需诊断”:有什么区别?

Susan Sarandon
Susan Sarandon原创
2024-12-02 16:14:12795浏览

Undefined Behavior vs.

未定义行为与“格式错误,无需诊断”之间的区别

C 标准将程序行为分为各种类别,包括- 格式正确、格式错误、未指定和未定义。 “未定义的行为”是指标准没有提供有关实现响应的要求或假设的情况。相比之下,“格式错误”的程序违反了语法或语义规则,因此不被视为格式良好。

短语“格式错误;无需诊断”出现在标准中,似乎与以下定义相矛盾一个格式不正确的程序。根据标准,一致的实现必须接受并执行格式良好的程序,而除了扩展使用的情况外,对于格式错误的程序没有任何要求。

这种不一致源于以下事实:标准从 C 标准中汲取灵感,除非另有明确说明,否则 C 标准将所有错误视为未定义的行为。然而,C 标准的目标是默认要求对所有错误进行诊断。

最终,“无需诊断”的存在表明相关行为不被视为未定义。它与“未定义行为”的不同之处仅在于标准明确允许编译器继续编译和执行而不发出错误或警告。这种区别主要用于描述运行时问题,而不是语法错误。

总之,虽然术语“格式错误;无需诊断”可能看起来令人困惑,但它本质上与未定义的行为含义相同。它表示程序格式不正确但允许编译器继续而不提供诊断的情况。主要区别在于,“格式错误;无需诊断”通常指运行时问题,而“未定义行为”则涵盖语法错误和运行时问题。

以上是未定义的行为与'格式不正确,无需诊断”:有什么区别?的详细内容。更多信息请关注PHP中文网其他相关文章!

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