在C99标准中哪里说有符号整数溢出是未定义的行为?
我在第6.2.5节中看到关于无符号整数溢出的注释是明确定义的(参见Why is unsigned integer overflow defined behavior but signed integer overflow isn't?):
涉及无符号操作数的计算永远不会溢出, 因为无法用结果无符号整数类型表示的结果是 减少模数可以是最大值的数字 由结果类型表示。
但我在附录J中查看未定义的行为,我只在列表中看到这些类似的项目:
具有签名提升类型的表达式被左移并且是值的 表达式是否定的,或者变换的结果在表达中是不可表示的 提升类型
和
整数运算或转换函数的结果值不能 表示
(注意这是指“整数运算函数”,而不是整数运算本身
答案 0 :(得分:4)
我没有C99的副本,但在C11标准中,本文出现在第6.5节第5段中:
如果在评估表达式期间发生异常情况(即,如果结果未在数学上定义或未在其类型的可表示值范围内),则行为未定义。
对于任何溢出来说,这似乎都是一个包罗万象;关于无符号整数的文本然后变成6.5¶5以上的特例。