[c] проверка на переполнение для разных типов
От: vsb Казахстан  
Дата: 04.10.14 16:37
Оценка:
Нужно уметь просто проверять на переполнение для ряда операций над примитивными типами. Пока не придумал ничего лучше кучи функций вида

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 смысла нет, т.к. это уже другая семантика переполнения.
Отредактировано 04.10.2014 18:52 vsb . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.