gcc 检查有符号数溢出

按照 C/C++ 标准,有符号数溢出的话,其行为是未定义的。但是常规的实现,处于性能考虑,并不检查这一点。

不过 gcc 还是有个参数,可以检查有符号数溢出:

-ftrapv
    This option generates traps for signed overflow on addition, subtraction,
    multiplication operations.

#include <limits.h>

int main(int argc, char** argv)
{
    int n = INT_MAX - 1;
    n += argc;
    return n + 10 * argc;
}

32 位下 coredump abort,64 位下却没问题,反汇编了一下调的带检查的加法函数的
代码,发现内部居然用的 64 位寄存器,能检查出来才怪。

看来只能检查出32位的,64位的生成了检查代码,却没有检查出来,有点鸡肋。

posted on 2012-05-01 14:24  chen3feng  阅读(764)  评论(0编辑  收藏  举报

导航