Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.11.06;
Скачать: CL | DM;

Вниз

Отключение проверки на переполнение   Найти похожие ветки 

 
Vladimir88   (2005-10-16 16:14) [0]

Как временно отключить проверку на переполнение переменной, например у меня есть переменная a:Byte; надо чтобы при а=255, a+1 должно быть равно 0.


 
Lamer@fools.ua ©   (2005-10-16 16:33) [1]

{$OVERFLOWCHECKS OFF}

Либо в Project Options > Compiler:
[ ] Overflow checking


 
Германн ©   (2005-10-16 17:02) [2]

Делай Inc(a). В ней проверка на переполнение не делается.


 
Lamer@fools.ua ©   (2005-10-16 17:14) [3]

>>Германн ©   (16.10.05 17:02) [2]

Делается. RTFM.


 
Германн ©   (2005-10-16 17:28) [4]

2 Lamer@fools.ua ©   (16.10.05 17:14) [3]

> Делается. RTFM.


Хм. В справке этого не написано.


 
Anatoly Podgoretsky ©   (2005-10-16 19:46) [5]

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 20:03) [6]

2 Anatoly Podgoretsky ©   (16.10.05 19:46) [5]

Так-то оно так, но в сабже:
> a:Byte
, а в справке Shortint.


 
Кефир87 ©   (2005-10-16 21:17) [7]

asm
inc a
end;


Может так?


 
Vladimir88   (2005-10-16 22:24) [8]

{$OVERFLOWCHECKS OFF}
да чёта не помогает это всё равно пишет IntegerOwerflow.


 
palva ©   (2005-10-16 23:19) [9]

А можно привести ваши операторы, дающие исключение. У меня вот так работает безо всяких $OVERFLOWCHECKS OFF

{$APPTYPE CONSOLE}
uses SysUtils;
var
 b: Byte;
begin
 b := 255;
 b := b + 1;
 WriteLn(b); // 0
end.


 
palva ©   (2005-10-16 23:28) [10]

Удалось добиться исключения при явном включении контроля (по умолчанию он выключен). И переменная должна быть Integer.

{$APPTYPE CONSOLE}
{$OVERFLOWCHECKS ON}
uses SysUtils;
var
 b: Integer;
begin
 b := $7FFFFFFF;
 b := b + 1;
 WriteLn(b); // Сюда не доходит
end.

Байтовая переменная в аналогичном коде не контролируется (исключения не происходит).


 
Германн ©   (2005-10-17 01:30) [11]


> Vladimir88   (16.10.05 22:24) [8]
>
> {$OVERFLOWCHECKS OFF}
> да чёта не помогает это всё равно пишет IntegerOwerflow.
>

Для полной ясности ответь - ты запускаешь программу из Дельфи(Run) или из EXE-шника?


 
Vladimir88   (2005-10-17 09:08) [12]

{$OVERFLOWCHECKS OFF}
  for j:=0 to Len-1 do
   inc(cs,ArrBody[j]);
  {$OVERFLOWCHECKS ON}

Запускаю из Delphi.


 
palva ©   (2005-10-17 13:15) [13]

IntegerOverflow значит результат приращения больше чем $7FFFFFFF
а если бы переполнялось значение Byte, то было бы RangeCheck, ИМХО.


 
Leonid Troyanovsky ©   (2005-10-17 14:01) [14]


> palva ©   (17.10.05 13:15) [13]
> IntegerOverflow значит результат приращения больше чем $7FFFFFFF


IMHO, зависит от прибавляемого.
Т.е., если это 1 - т.е., константа типа Integer, то получим rang check error,
а если это константа типа Byte (или, скажем, операции типа inc), то -
Integer overflow. Конечно же, при {R+,Q+}.

--
Regards, LVT.


 
Leonid Troyanovsky ©   (2005-10-17 14:15) [15]


> 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.



Страницы: 1 вся ветка

Текущий архив: 2005.11.06;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.052 c
2-1129539982
Vladimir88
2005-10-17 13:06
2005.11.06
Temp Dir


14-1129548828
Fast2
2005-10-17 15:33
2005.11.06
Где найти компоненты для работы с FireBird?


1-1129728289
diwww
2005-10-19 17:24
2005.11.06
Как отследыть событие "сворачивание окна" в TrayBar у формы?


6-1113745774
Alek_1
2005-04-17 17:49
2005.11.06
Indy + SSL


2-1129240693
Lordalexander
2005-10-14 01:58
2005.11.06
Мышь