LINUX.ORG.RU

История изменений

Исправление vodz, (текущая версия) :

Как уже писали выше: переполнение знакового — это UB. А UB — это ни-ни

UB там идёт от UB реализации в самой архитектуре — не известно, как любая архитектура среагирует на переполнение: то ли будет недопустимая операция, то ли будет сложение то ли нет, то ли будет отрицательное значение, то ли вообще неизвестно что. Для конкретной архитектуры та же strtol() вполне справляется с переполнением: сравнивается с безнаковым и MAX_INT, запоминая знак и работая предварительно с положительным значением.

Исходная версия vodz, :

Как уже писали выше: переполнение знакового — это UB. А UB — это ни-ни

UB там идёт от UB реализации в самой архитектуре — не известно, что любая архитектура среагирует на переполнение: то ли будет недопустима операция, то ли будет сложение то ли нет, то ли будет отрицательное значение, то ли вообще неизвестно что. Для конкретной архитектуры та же strtol() вполне справляется с переполнением: сравнивается с безнаковым и MAX_INT, запоминая знак и работая предварительно с положительным значением.