在C99标准中,它表示有符号整数溢出是未定义的行为吗?

时间:2016-03-31 19:50:26

标签: c c99 undefined-behavior

在C99标准中哪里说有符号整数溢出是未定义的行为?

我在第6.2.5节中看到关于无符号整数溢出的注释是明确定义的(参见Why is unsigned integer overflow defined behavior but signed integer overflow isn't?):

  

涉及无符号操作数的计算永远不会溢出,   因为无法用结果无符号整数类型表示的结果是   减少模数可以是最大值的数字   由结果类型表示。

但我在附录J中查看未定义的行为,我只在列表中看到这些类似的项目:

  

具有签名提升类型的表达式被左移并且是值的   表达式是否定的,或者变换的结果在表达中是不可表示的   提升类型

  

整数运算或转换函数的结果值不能   表示

(注意这是指“整数运算函数”,而不是整数运算本身

1 个答案:

答案 0 :(得分:4)

我没有C99的副本,但在C11标准中,本文出现在第6.5节第5段中:

  

如果在评估表达式期间发生异常情况(即,如果结果未在数学上定义或未在其类型的可表示值范围内),则行为未定义。

对于任何溢出来说,这似乎都是一个包罗万象;关于无符号整数的文本然后变成6.5¶5以上的特例。