Wieso klappt das denn nicht?
$Q, bzw. $OverFlowChecks sollte nur auf Zeilenebene gültig sein, alss nur bis zur nächsten Definition, oder bis Dateiende, falls nichts mehr kommt.
Bei INC muß man etwas aufpassen ... siehe Beschreibung vom letzten Beispiel und darum hier auch die Tempvariable.
Delphi-Quellcode:
function IncByte(var X: Byte; N: Byte = 1): Boolean;
var
X2: Byte;
begin
X2 := X;
try
{$OverFlowChecks On}
Inc(X, N);
{$OverFlowChecks Off} // entweder das
Result := True;
except
on EIntOverflow do begin
X := X2;
{$OverFlowChecks Off} // oder das .... das wo, sollte nahezu egal sein
Inc(X, N);
Result := False;
end;
end;
end;
Wenn es vor dem Zuweisen knallt, dann geht das auch ohne zusätzliche Variable.
Delphi-Quellcode:
function IncByte(var X: Byte; N: Byte = 1): Boolean;
begin
try
{$OverFlowChecks On}
X := X + N;
Result := True;
except
on EIntOverflow do begin
{$OverFlowChecks Off}
Inc(X, N);
Result := False;
end;
end;
end;
Wenn INC direkt im Ziel-Speicher rechnet, dann ist auch mit
Exception dennoch das Ergebnis bereits in der Variable und muß nicht nochmal berechnet werden.
Delphi-Quellcode:
function IncByte(var X: Byte; N: Byte = 1): Boolean;
begin
try
{$OverFlowChecks On}
Inc(X, N);
{$OverFlowChecks Off}
Result := True;
except
on EIntOverflow do
Result := False;
end;
end;