if (x + y < x) // addition overflows
if (x - y > x) // subtraction underflows

if ((b > 0 && a > INT_MAX - b) || (b < 0 && a < INT_MIN - b)) // addition overflows
if ((b > 0 && a < INT_MIN + b) || (b < 0 && a > INT_MAX + b)) // subtraction underflows

f ((y > 0 && x < INT_MIN + y) || (y < 0 && x > INT_MAX + y)) {
    // error
} else {
    delta = abs(x - y);
}

int chkadd(int a, int b)
{
    if(b < 0)
        return chksub(a,-b);
    else
    if(INT_MAX - b < a)
    {
        fputs("int overflow\n", stderr);
        return INT_MAX;
    }
    return a + b;
}