H2135 La boucle FOR ou WHILE s'exécute zéro fois - supprimée (Delphi)

De RAD Studio
Aller à : navigation, rechercher

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

Le compilateur a déterminé que la structure de boucle spécifiée ne s'exécutera jamais, ainsi il va l'enlever comme optimisation. Exemple :


program Produce;
(*$HINTS ON*)

  var
    i: Integer;

begin
  i := 0;
  WHILE FALSE AND (i < 100) DO
    INC(i);
end.

Le compilateur détermine que 'FALSE AND (i < 100)' est toujours évaluée à FALSE, il en conclut que la boucle ne sera pas exécutée.


program Solve;
(*$HINTS ON*)

  var
    i: Integer;

begin
  i := 0;
  WHILE i < 100 DO
    INC(i);
end.

La solution à cette information est de vérifier que l'expression booléenne utilisée pour le contrôle des instructions while n'est pas toujours à FALSE. Dans les boucles for, vous devez vérifier que (limite haute - limite basse) >= 1.

Vous pouvez recevoir cet avertissement si une boucle FOR incrémente sa variable de contrôle d'une valeur appartenant à l'étendue d'un Longint à une valeur qui sort de l'étendue d'un Longint. Par exemple :


var I: Cardinal;
begin
  For I := 0 to $FFFFFFFF do
...

Cela provient d'une limite du compilateur que vous pouvez résoudre en remplaçant la boucle FOR par une boucle WHILE.