Форум: "Начинающим";
Текущий архив: 2005.11.06;
Скачать: [xml.tar.bz2];
ВнизОтключение проверки на переполнение Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.041 c