Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Отключение проверки на переполнение [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


Наверх

Титульная страница Поиск, карта сайта Написать письмо