首页  >  文章  >  后端开发  >  C 中未定义行为和格式错误之间有什么区别?

C 中未定义行为和格式错误之间有什么区别?

Susan Sarandon
Susan Sarandon原创
2024-11-21 18:23:16571浏览

What's the Difference Between Undefined Behavior and Ill-Formedness in C  ?

区分未定义行为和格式错误

未定义行为 (UB)、格式错误和实现定义的行为是不同的概念C.然而,该标准的术语可能会令人困惑,特别是“格式错误;无需诊断”这一短语。

格式错误的程序和可诊断性

错误的-形成的程序违反了语言的语法或语义规则。根据该标准,它“否则仅被定义为格式不正确”。从逻辑上讲,这意味着格式错误的程序不应编译。

但是,该标准允许实现具有根据标准格式错误的扩展,但不会改变格式良好的程序的行为。在这些情况下,实现必须诊断扩展的使用,但允许继续执行。

未定义的行为和可诊断性

未定义的行为是指无法执行的程序行为可以通过标准来预测。实现可以自由地以任何方式定义行为,包括暂停执行或默默地忽略问题。与格式错误不同,UB 并不一定意味着程序不应该编译。

“格式错误;无需诊断”

术语“格式错误” “不需要诊断”可以解释为指程序违反语法或语义规则,但不需要实现来诊断错误的情况。这本质上使其等同于 UB,只不过实现仍然可以静默退出或继续执行。

使用这种措辞的原因可能是为了实现实现的灵活性。它使实现能够以在实践中可能有用的方式处理格式错误的错误。

结论

尽管 C 标准的措辞有时不一致,一般规则是错误或格式不正确的代码需要诊断,除非标准明确指出否则或者它是未定义的行为。在“格式错误;无需诊断”的情况下,它本质上是未定义行为的同义词,为实施者提供了处理某些错误的一定自由度。

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

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