Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.151 Beiträge
 
Delphi 12 Athens
 
#7

AW: Überlauf bei Rechenoperation mitbekommen

  Alt 4. Apr 2014, 14:46
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;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat