W1022 Der Vergleich ergibt immer True (Delphi)

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Fehler- und Warnungsmeldungen (Delphi)

Der Compiler hat festgestellt, dass ein Ausdruck immer den Wert True liefert. Dies ist in den meisten Fällen das Ergebnis eines Randtests, wobei ein Vergleich mit einem bestimmten Variablentyp erfolgt. Beispiel: Ein Integer verglichen mit $80000000.

In früheren Versionen des Embarcadero Pascal-Compilers (vor 12.0) wäre die Hexadezimal-Konstante $80000000 als negativer Integerwert definiert gewesen, aber durch die Einführung des Typs Int64 ist $80000000 nun ein positiver Wert des Typs Int64. Dies hat zur Folge, dass Vergleiche dieser Konstante mit Integer-Variablen nicht mehr die gleichen Ergebnisse liefern wie in früheren Versionen.

Für den Umgang mit dieser Warnung gibt es kein Patentrezept. Manchmal kann sie ignoriert werden, aber in anderen Fällen ist es erforderlich, den Quelltext entsprechend zu ändern.


program Produce;

  var
    i : Integer;
    c : Cardinal;

begin
  c := 0;
  i := 0;
  if c >= 0 then
    WriteLn('true');

  if i < $80000000 then
    WriteLn('true');
end.

In diesem Beispiel ermittelt der Compiler, dass die beiden Ausdrücke immer den Wert True ergeben. Im ersten Fall ist ein Wert des Typs Cardinal, der kein Vorzeichen aufweist, immer größer oder gleich 0. Im zweiten Fall ist ein Wert des Typs 32-Bit-Integer immer kleiner als der Wert $80000000 des Typs Int64.