W1021 La comparaison est toujours évaluée à False (Delphi)

De RAD Studio
Aller à : navigation, rechercher

Remonter à Messages d'erreur et d'avertissement (Delphi)

Le compilateur a déterminé qu'une expression donnera toujours le résultat False. C'est le cas principalement lors de tests de limites avec un type de variable spécifique - par exemple, un Integer avec $80000000.

Dans les versions du compilateur Delphi précédant la version 12.0, la constante hexadécimale $80000000 était une valeur Integer négative, mais avec l'introduction du type int64, la même constante donne un type int64 positif. En conséquence, les comparaisons de cette constante avec des variables Integer ne fonctionne plus comme avant.

S'agissant d'un avertissement plutôt que d'une erreur, aucune méthode standard ne permet de résoudre le problème. Parfois, l'avertissement peut être ignoré, parfois, le code doit être réécrit.


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.

Dans cet exemple, le compilateur détermine que deux expressions donneront toujours le résultat False. Dans le premier cas, un Cardinal, non signé, ne peut jamais être inférieur à 0. Dans le deuxième cas, une valeur Integer sur 32 bits ne peut jamais être supérieure, ni même être égale, à une valeur $80000000 de type int64.