编辑包含适当的标准参考感谢Carl Norum。C:标准和编译器中的整数溢出
C标准状态
如果表达式的评估(即,如果该结果不是在数学上表示的值的其类型的范围限定或不期间发生异常条件 ),行为是不确定的。
是否有编译器开关保证整数溢出的某些行为?我想避免鼻子恶魔。特别是,我想强制编译器在溢出时换行。
为了唯一性,让我们将标准设为C99,编译器设为gcc。但我会对其他编译器(icc,cl)和其他标准(C1x,C89)的答案感兴趣。事实上,为了惹恼C/C++人群,我甚至会对C++ 0x,C++ 03和C++ 98的答案表示赞赏。
注:国际标准ISO/IEC 10967-1在这里可能是相关的,但据我所知,它只在信息附件中提到。
优秀,正是我想看到的。有没有类似的无符号类型? – Charles 2010-09-09 17:53:27
@Charles你不需要他们的无符号类型 - 溢出行为已经为他们定义好了(请参阅我的答案)。 – 2010-09-09 18:00:29
@Carl Norum:我看到它是用C++定义的,它在C中定义了轮班(6.5.7段5)。我无法看到C标准中添加和乘法的定义。 – Charles 2010-09-09 18:03:34