实现定义的行为是未定义的行为

我开了一个C99标准。通道 4 “一致性”,第 2 页说如下:

如果出现在约束之外的“应”或“不应”要求被违反,则行为未定义。[...]

下面,在第。5 我们看到以下内容:

[...] (2) 它不应产生依赖于任何未指定、未定义或实现定义的行为的输出,并且不应超过任何最小实现限制。

这对我来说似乎表明实现定义的行为是未定义的行为,因为程序“不应”依赖于实现定义的行为。

现在,我有两个问题:

  • Ch.4 p 中提到的“超出约束”是什么意思?2 是什么意思?这是否适用于当前情况?为什么?(我不擅长复杂的英语句子,因此指出其中的“约束”将不胜感激)。
  • 毕竟实现行为是未定义的吗?是/否,为什么?

回答

不,实现定义的行为不是未定义的行为。

第 5 段是指严格遵守的程序:

  1. 一个严格符合程序,只需要使用本标准规定的语言和库的这些功能。2)它不应产生依赖于任何未指定、未定义或实现定义的行为的输出,并且不应超过任何最小实现限制。

第 7 段及其脚注解释了 2 个级别的一致性:

  1. 符合程序是一个能够接受的一个一致的实现。4)

具有实现定义行为的程序只是符合程序,而不是严格符合程序。


以上是实现定义的行为是未定义的行为的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>