相关疑难解决方法(0)

如何检测无符号整数乘法溢出?

我在C++编写一个程序来找到所有的解决方案b = c ^,其中一个,bc ^一起使用所有的数字0-9只出现一次.该方案在循环值b,并且在每次跑了数字计数程序,b一个b以检查是否数字的条件感到满意.

然而,当可以产生伪解一个b溢出整数限制.我最终使用以下代码检查:

unsigned long b, c, c_test;
...
c_test=c*b;         // Possible overflow
if (c_test/b != c) {/* There has been an overflow*/}
else c=c_test;      // No overflow
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来测试溢出?我知道有些芯片有一个内部标志,当溢出发生时会设置,但我从未见过通过C或C++访问它.


请注意,在C和C++中,签名 int溢出是未定义的行为,因此您必须在不实际导致它的情况下检测它.有关添加前的signed int overflow,请参阅在C/C++中检测带符号的溢出

c c++ integer-overflow

593
推荐指数
19
解决办法
30万
查看次数

C的有用GCC标志

除了设置-Wall和设置之外-std=XXX,还有什么其他真正有用的,但是在C中使用的知名度较低的编译器标志?

我对任何其他警告特别感兴趣,和/或在某些情况下将警告转换为错误,以绝对最小化任何意外类型不匹配.

c gcc compiler-flags

154
推荐指数
18
解决办法
6万
查看次数

C:标准和编译器中的整数溢出

由Carl Norum编辑,包括适当的标准参考.

C标准规定

如果在计算表达式期间发生异常情况(即,如果结果未在数学上定义或未在其类型的可表示值范围内),则行为未定义.

是否有编译器开关可以保证整数溢出时的某些行为?我想避免鼻腔恶魔.特别是,我想强制编译器包装溢出.

为了唯一性,让标准为C99,编译器为gcc.但我会对其他编译器(icc,cl)和其他标准(C1x,C89)的答案感兴趣.事实上,只是为了惹恼C/C++人群,我甚至欣赏C++ 0x,C++ 03和C++ 98的答案.

注:国际标准ISO/IEC 10967-1可能与此相关,但据我所知,仅在资料性附录中提到过.

c standards gcc undefined

28
推荐指数
4
解决办法
1万
查看次数

检测整数溢出

我正在使用一个大型C库,其中使用了一些数组索引int.我需要找到一种在运行时捕获整数溢出的方法,以便缩小到有问题的代码行.Libc手册说明:

FPE_INTOVF_TRAP整数溢出(在C程序中不可能,除非您以特定于硬件的方式启用溢出捕获).

但是gcc选项-ffpe-trap表明那些只适用于FP数字?
那我怎么做启用整数溢出陷阱?我的系统是Xeon/Core2,gcc-4.x,Linux 2.6

我已经查看了类似的问题,但他们都很熟悉修改代码.我需要知道哪个代码首先是有问题的.
如果Xeons无法捕获溢出,哪些处理器可以?我也可以访问非emt64机器.

我找到了一个专为llvm设计的工具:http: //embed.cs.utah.edu/ioc/ 似乎没有gcc/icc的等价物?

c debugging operating-system

8
推荐指数
1
解决办法
1605
查看次数