毫无疑问,C 标准为归类为“不清楚”的行为引入了一系列广泛的定义。然而,“程序格式错误;无需诊断”这句话引发了关于其与其他行为类别的区别的问题。
定义格式正确和格式错误的行为:
C 标准将程序分类为格式良好或格式错误。格式良好的程序遵守语法和可诊断的语义规则。相反,格式错误的程序违反了这些规则,最好不要编译。
实现定义的、未指定的和未定义的行为:
实现定义的和未指定的行为是与格式良好的行为不同,但它们并不意味着错误的代码。在前一种情况下,实施必须记录其具体操作,而在后一种情况下,则不需要记录。另一方面,根据 1.3.13,未定义的行为意味着程序是错误的。
编译器、未定义的行为和格式错误的程序:
尽管术语“错误”建议编译器应以错误消息终止编译,但 C 标准允许对未定义行为进行静默处理。值得注意的是,编译器通常不会因未定义的行为而发出警告或终止编译。
格式错误的程序和诊断要求:
使用“无需诊断”与“格式错误”并存的是一个悖论。如果格式不正确的程序不应该编译,那么允许编译器默默地忽略它们将是违反直觉的。然而,标准明确允许这种可能性。
结论:
“格式错误;无需诊断”和“未定义行为”之间的区别仍然模糊。虽然格式不正确的程序和不正确的代码以及未定义的行为与运行时问题之间可能存在关联,但这并不总是一致的。最终,“无需诊断”方面至关重要,因为它超越了在格式不正确的程序情况下生成诊断的期望。
以上是C 的'格式错误;无需诊断”和未定义行为之间有什么区别?的详细内容。更多信息请关注PHP中文网其他相关文章!