Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.024 c
14-1129198721
Ega23
2005-10-13 14:18
2005.11.06
Когда выздоровеет Россия?


11-1109864141
Ajax
2005-03-03 18:35
2005.11.06
OwnerDraw в TreeView


4-1125582840
Пантелеев Иван
2005-09-01 17:54
2005.11.06
Focus


2-1128903401
Raziel
2005-10-10 04:16
2005.11.06
Открытие файлов


14-1129545597
sergg
2005-10-17 14:39
2005.11.06
Такой же по качеству ресурс о Buildere?




   Наверх