bum*_*ead 1 c undefined-behavior language-lawyer
我开了一个C99标准。通道 4 “一致性”,第 2 页说如下:
如果出现在约束之外的“应”或“不应”要求被违反,则行为未定义。[...]
下面,在第。5 我们看到以下内容:
[...] (2) 它不应产生依赖于任何未指定、未定义或实现定义的行为的输出,并且不应超过任何最小实现限制。
这对我来说似乎表明实现定义的行为是未定义的行为,因为程序“不应”依赖于实现定义的行为。
现在,我有两个问题:
不,实现定义的行为不是未定义的行为。
第 5 段是指严格遵守的程序:
- 一个严格符合程序,只需要使用本标准规定的语言和库的这些功能。2)它不应产生依赖于任何未指定、未定义或实现定义的行为的输出,并且不应超过任何最小实现限制。
第 7 段及其脚注解释了 2 个级别的一致性:
- 甲符合程序是一个能够接受的一个一致的实现。4)
4) 严格一致的程序旨在在一致的实现之间最大限度地可移植。一致性程序可能依赖于一致性实现的不可移植特性。
具有实现定义行为的程序只是符合程序,而不是严格符合程序。