【发布时间】:2016-03-31 19:50:26
【问题描述】:
C99 标准中的什么地方说有符号整数溢出是未定义的行为?
我在第 6.2.5 节中看到关于无符号整数溢出定义明确的评论(参见 Why is unsigned integer overflow defined behavior but signed integer overflow isn't?):
涉及无符号操作数的计算永远不会溢出, 因为不能用生成的无符号整数类型表示的结果是 以比最大值大一的数字为模减少,可以是 由结果类型表示。
但我在附录 J 中查看未定义的行为,我只在列表中看到这些类似的项目:
具有带符号提升类型的表达式左移,并且 表达式是否定的,否则移位的结果将无法在 提升类型
和
整数算术或转换函数的结果值不能 代表
(注意这里指的是“整数算术函数”,而不是整数算术本身
【问题讨论】:
-
C99 标准草案 n1256 6.5 表达式 5 如果在计算表达式期间出现异常情况(即,如果结果未在数学上定义或不在其可表示值的范围内) type),行为未定义。
-
@EOF:为什么不将其发布为答案?
-
@NateEldredge:有一个引用 C11 草案标准的答案,据我所知,在这方面是相同的。
-
附录 J 是非规范性的,它只是一个总结
-
啊哈这个问题很相似:stackoverflow.com/questions/3679047/…
标签: c c99 undefined-behavior