Я пытаюсь использовать эту простую программу для обнаружения исключений.
Исключение деление на ноль успешно перехвачено. Однако я не могу поймать целочисленное переполнение.
Я понимаю, что целое число типа SmallInt переполняется после +32767, поскольку наибольшее значение со знаком = 2^15 - 1 (т. е. +32767).
Вот код:
Program ss;
Var
Price, Qty: SmallInt;
Rate: Real;
Begin
Try
write('Enter Total price '); Readln(Price);
Write('Enter qty '); Readln(Qty);
Rate := Price / Qty;
Writeln('Single item = ', Rate:0:2);
except
On EDivByZero Do Writeln('qty must be a valid num above 0');
On EIntOverflow Do Writeln('too large')
end;
End.
Однако похоже, что исключение переполнения не перехвачено. Скорее, значение переполнения принимается как отрицательное число, и код продолжается, как будто все в порядке.
Вот результат:
Введите общую стоимость 32768
Введите количество 1
Один элемент = -32768,00
Нажмите любую клавишу, чтобы вернуться в IDE
Я что-то не так делаю в коде? Каков правильный метод отлова целочисленного переполнения в FreePascal?
Спасибо!
SmallInt
. Он дал вывод как -31536. Другими словами, он переполняется, но не сталкивается с кодом обработки исключений. - person itsols   schedule 07.01.2016