这个检测整数加法溢出的函数实际上有用吗?

zen*_*hoy 7 c c++ integer-overflow

在阅读这个问题的评论时,我遇到了一个指向comp.lang.c常见问题的链接,该链接显示了一个"小心添加功能",据称可以检测到整数溢出:

int
chkadd(int a, int b)
{
    if (INT_MAX - b < a) {
        fputs("int overflow\n", stderr);
        return INT_MAX;
    }
    return a + b;
}
Run Code Online (Sandbox Code Playgroud)

如果这不会溢出怎么样b == -1?如果假设是a并且b都是积极的,为什么要制造它们int而不是unsigned int首先?

小智 1

也许他们只是忽略了这一点。常见问题解答页面上的其他链接似乎提供了更正确的代码。