![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Отключение проверки на переполнение [D7, WinXP]
Vladimir88 © (2005-10-16 16:14:00)Как временно отключить проверку на переполнение переменной, например у меня есть переменная a:Byte; надо чтобы при а=255, a+1 должно быть равно 0.
Leonid Troyanovsky (2005-10-17 14:15:00) [1]
> Vladimir88 (17.10.05 09:08) [12]
> {$OVERFLOWCHECKS OFF}
> for j:=0 to Len-1 do
> inc(cs,ArrBody[j]);
> {$OVERFLOWCHECKS ON}
Локальный диапазон {local scope} стоило бы, IMHO, применять
к некоему блоку, т.е., например:
{$R+,Q+}
procedure x..;
..
end;
{$R-,Q-}
Ну, и стоило б также отключить подобное после отладки.
--
Regards, LVT.
Leonid Troyanovsky (2005-10-17 14:01:00) [2]
> palva © (17.10.05 13:15) [13]
> IntegerOverflow значит результат приращения больше чем $7FFFFFFF
IMHO, зависит от прибавляемого.
Т.е., если это 1 - т.е., константа типа Integer, то получим rang check error,
а если это константа типа Byte (или, скажем, операции типа inc), то -
Integer overflow. Конечно же, при {R+,Q+}.
--
Regards, LVT.
palva (2005-10-17 13:15:00) [3]IntegerOverflow значит результат приращения больше чем $7FFFFFFF
а если бы переполнялось значение Byte, то было бы RangeCheck, ИМХО.
Vladimir88 (2005-10-17 09:08:00) [4]{$OVERFLOWCHECKS OFF}
for j:=0 to Len-1 do
inc(cs,ArrBody[j]);
{$OVERFLOWCHECKS ON}
Запускаю из Delphi.
Германн (2005-10-17 01:30:00) [5]
> Vladimir88 (16.10.05 22:24) [8]
>
> {$OVERFLOWCHECKS OFF}
> да чёта не помогает это всё равно пишет IntegerOwerflow.
>
Для полной ясности ответь - ты запускаешь программу из Дельфи(Run) или из EXE-шника?
palva (2005-10-16 23:28:00) [6]Удалось добиться исключения при явном включении контроля (по умолчанию он выключен). И переменная должна быть Integer.
{$APPTYPE CONSOLE}
{$OVERFLOWCHECKS ON}
uses SysUtils;
var
b: Integer;
begin
b := $7FFFFFFF;
b := b + 1;
WriteLn(b); // Сюда не доходит
end.
Байтовая переменная в аналогичном коде не контролируется (исключения не происходит).
palva (2005-10-16 23:19:00) [7]А можно привести ваши операторы, дающие исключение. У меня вот так работает безо всяких $OVERFLOWCHECKS OFF
{$APPTYPE CONSOLE}
uses SysUtils;
var
b: Byte;
begin
b := 255;
b := b + 1;
WriteLn(b); // 0
end.
Vladimir88 (2005-10-16 22:24:00) [8]{$OVERFLOWCHECKS OFF}
да чёта не помогает это всё равно пишет IntegerOwerflow.
Кефир87 (2005-10-16 21:17:00) [9]
asm
inc a
end;
Может так?
Германн (2005-10-16 20:03:00) [10]2 Anatoly Podgoretsky © (16.10.05 19:46) [5]
Так-то оно так, но в сабже:
> a:Byte
, а в справке Shortint.
Anatoly Podgoretsky (2005-10-16 19:46:00) [11]will cause an EIntOverFlow exception to be raised if range and overflow checking are on. In Delphi 1.0, this did not raise an exception.
Германн (2005-10-16 17:28:00) [12]2 Lamer@fools.ua © (16.10.05 17:14) [3]
> Делается. RTFM.
Хм. В справке этого не написано.
Lamer@fools.ua (2005-10-16 17:14:00) [13]>> Германн © (16.10.05 17:02) [2]
Делается. RTFM.
Германн (2005-10-16 17:02:00) [14]Делай Inc(a). В ней проверка на переполнение не делается.
Lamer@fools.ua (2005-10-16 16:33:00) [15]
{$OVERFLOWCHECKS OFF}
Либо в Project Options > Compiler:
[ ] Overflow checking