Что-то не гуглится...

Nov 25, 2021 18:15

Нужен хелп по программизму C/C++. Сам что-то не смог нагуглить.

Есть у меня кусок программы, где делятся введенные юзверем числа. Деление на ноль, понятное дело, можно проверить. Но есть еще вот такая штука:

int32_t y= 0x80000000;
int32_t x= -1;
int32_t z= y / x;

Последний оператор под визуал студией генерит исключение Integer Overflow - где там переполнение, я понимаю. Но вопрос в том, как его корректно обрабатывать.

Во-первых, это первое, что мне пришло в голову, кроме простого деления на ноль. А вдруг есть еще какие-то комбинации, которые вызывают исключение. Не хотелось бы, чтобы сервер ложился от злоумышленника, который найдет еще какую-то комбинацию, о которой я позабыл. Так что первый вопрос - что еще может генериться в простейшей арифметике, чего я не учел? Остальные underflow/overflow, которые я попробовал, вроде ничего не генерят, в том числе если в примере заменить y / x на y * x - тоже будет overflow, но без исключения.

Во-вторых, это исключение под виндой можно ловить при помощи __try ... __except. Но они не портируемые. А есть ли что-то портируемое? Какие особенности под линухом/унихом?

И вообще поделитесь, кто с чем сталкивался в связи со всякими исключениями/сигналами от целочисленной и float арифметики.
Previous post Next post
Up