W1021 Der Vergleich ergibt immer False (Delphi)

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Fehler- und Warnungsmeldungen (Delphi) - Index

Der Compiler hat festgestellt, dass ein Ausdruck immer den Wert False 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 Delphi-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('false');

  if i >= $80000000 then
    WriteLn('false');
end.

In diesem Beispiel ermittelt der Compiler, dass die beiden Ausdrücke immer den Wert False 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.