实现定义的行为是未定义的行为
我开了一个C99标准。通道 4 “一致性”,第 2 页说如下:
如果出现在约束之外的“应”或“不应”要求被违反,则行为未定义。[...]
下面,在第。5 我们看到以下内容:
[...] (2) 它不应产生依赖于任何未指定、未定义或实现定义的行为的输出,并且不应超过任何最小实现限制。
这对我来说似乎表明实现定义的行为是未定义的行为,因为程序“不应”依赖于实现定义的行为。
现在,我有两个问题:
- Ch.4 p 中提到的“超出约束”是什么意思?2 是什么意思?这是否适用于当前情况?为什么?(我不擅长复杂的英语句子,因此指出其中的“约束”将不胜感激)。
- 毕竟实现行为是未定义的吗?是/否,为什么?
回答
不,实现定义的行为不是未定义的行为。
第 5 段是指严格遵守的程序:
- 一个严格符合程序,只需要使用本标准规定的语言和库的这些功能。2)它不应产生依赖于任何未指定、未定义或实现定义的行为的输出,并且不应超过任何最小实现限制。
第 7 段及其脚注解释了 2 个级别的一致性:
- 甲符合程序是一个能够接受的一个一致的实现。4)
具有实现定义行为的程序只是符合程序,而不是严格符合程序。