| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > ERangeError и EIntOverflow |
| Автор: zalex 30.3.2006, 23:23 |
| Привет всем. Попытался понять, в чем разница между директивами ($R+) и ($Q+). Кажется понял, и прошу проконтролировать - правильно ли? Итак ERangeError возникает в случае, если идёт обращение к "неправильному" индексу массива, строки. Так же к ERangeError приводит строка, в которой есть оператор _присвоения_, при попытке присвоения целочисленной величине значения, выходящего за допустисый дивавзон. EIntOverflow возникает в случае, если в строке нет оператора присвоения, но полученный результат не помещается в указанном диапазоне, например Inc ©, Dec (d) - где c=255,d=0, c,d:Byte. |
| Автор: zalex 31.3.2006, 00:24 | ||
Дельфи 7. Выдает именно EIntOverflow.
|
| Автор: Yanis 31.3.2006, 00:43 | ||
| Помоему это из за приведения типа параметра, который передаётся в Inc. Попробуй такой код:
Генерируется именно ERangeError, т.е. вызывается процедура _BoundErr, а если бы генерировался EIntOverflow, то срабатывала бы процедура _IntOver. |
| Автор: zalex 31.3.2006, 00:48 |
| дык я же отметил ,что в случае наличия оператора присавивания - ERangeError, а при его отсутствии EintOverflow приведенный Вами код выдаст ERangeError ЗЫ В Вашем примере директивка {$O-} - опечатка? |
| Автор: Yanis 31.3.2006, 00:53 |
| Нет. Это отключение оптимизации, потому что компилятор не компилит этот код, если переменная нигде не юзается. |
| Автор: zalex 31.3.2006, 00:55 |
| понял, поэтому, что бы просмореть Ваш пример, внизу добавил ShowMessage(IntToStr(a)) |