Обнаружение переполнения зависит от типа ваших переменных.
Если они не подписаны, достаточно определить, является ли результат ниже, чем один из их операндов.
inline unsigned_overflow(unsigned a, unsigned b){
return (a+b)<a;
Еслиоба являются беззнаковыми, переполнение может произойти, только если операнды имеют один и тот же знак, а знак результата будет другим.Таким образом, существует переполнение, если знак результата отличается от знака его двух операндов.
inline signed_overflow(int a, int b){
unsigned ua=a, ub=b;
return (int)(((ua^(ua+ub))&((ub^(ua+ub)))<0 ;