c-在C99标准中,有符号整数溢出是未定义的行为



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

我在第6.2.5:节中看到了关于无符号整数溢出定义良好的注释(请参阅为什么无符号整数溢流定义了行为,但有符号整数溢出不是';t?)

涉及无符号操作数的计算永远不会溢出,因为无法由生成的无符号整数类型表示的结果是降模-比最大值大一的数字由结果类型表示。

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

具有已签名提升类型的表达式被左移表达式为负数,或者移位的结果在提升型

整数算术或转换函数的结果值不能为代表

(注意,这指的是"整数算术函数",而不是整数算术本身

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

如果在表达式的求值过程中出现异常条件(即,如果结果没有在数学上定义或不在其类型的可表示值范围内),则行为是未定义的。

这似乎是任何溢出的全部;关于无符号整数的文本在6.5¶5以上变为特殊情况。

最新更新