Нужно уметь просто проверять на переполнение для ряда операций над примитивными типами. Пока не придумал ничего лучше кучи функций вида
bool ovc_ssize_plus_ssize(ssize_t x, ssize_t y) {
if (x >= 0) {
return SSIZE_MAX - x >= y;
} else {
return SSIZE_MIN - x <= y;
}
}
для используемых сочетаний типов и операций.
Может быть есть вариант попроще? В идеале какой-нибудь флажок для компилятора понавтыкать проверок на overflow flag после каждой арифметической операции. Не в идеале уже написанные кем-нибудь такие проверки в виде мини-библиотеки.
Интересует именно C, для C++ есть SafeInt. Для C вроде есть IntSafe от микрософта, но там только unsigned типы, что меня сбивает с толку. А что если мне надо от unsigned отнять signed? конвертировать signed в unsigned смысла нет, т.к. это уже другая семантика переполнения.