感谢 Carl Norum 的编辑,以包含正确的标准参考。
C 标准规定
If an 特殊情况发生在表达式求值期间(即,如果结果未在数学上定义或不在其类型的可表示值范围内),则行为未定义。
是否有编译器开关可以保证整数溢出时的某些行为?我想避免鼻恶魔。特别是,我想强制编译器在溢出时换行。
为了唯一起见,我们将标准设为C99,编译器设为gcc。但我对其他编译器(icc、cl)和其他标准(C1x、C89)的答案感兴趣。事实上,只是为了惹恼 C/C++ 人群,我什至希望得到 C++0x、C++03 和 C++98 的答案。
注:国际标准 ISO/IEC 10967-1 可能与此相关,但据我所知,它仅在资料性附件中提及。
看一眼-ftrapv and -fwrapv http://gcc.gnu.org/onlinedocs/gcc-4.0.2/gcc/Code-Gen-Options.html:
-ftrapv
此选项针对加法、减法、乘法运算的有符号溢出生成陷阱。
-fwrapv
此选项指示编译器假设加法、减法和乘法的有符号算术溢出使用二进制补码表示进行回绕。该标志启用一些优化并禁用其他优化。根据 Java 语言规范的要求,Java 前端默认启用此选项。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)