经Carl Norum提醒,已编辑以包含适当的标准参考。
C标准规定:
如果在表达式求值期间发生了“异常情况”(即结果在其类型的可表示值范围之外或在数学上未定义),则行为是未定义的。
是否有编译器开关可以保证整数溢出时的某些行为?我想避免出现未知的错误。特别地,我想强制编译器在溢出时进行包装。
为了保持唯一性,让我们将标准定为C99,编译器为gcc。但我也对其他编译器(icc、cl)和其他标准(C1x、C89)的答案感兴趣。事实上,为了激怒C/C ++群体,我甚至希望得到C++0x、C++03和C++98的答案。
注意:国际标准ISO / IEC 10967-1可能与此相关,但据我所知,它仅在说明性附件中提到。
-fwrapv
选项并不保证溢出会被包装回来。它仅告诉编译器优化器可以假设溢出会被包装回来,而这是否为真取决于您的机器架构。 - caf