H2077 An '%s' zugewiesener Wert wird niemals benutzt (Delphi)

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Fehler- und Warnungsmeldungen (Delphi)

Diese Hinweismeldung wird angezeigt, wenn der einer Variablen zugewiesene Wert nicht verwendet wird. Bei aktivierter Optimierung wird die Anweisung automatisch entfernt.

Das Problem kann auftreten, wenn die Variable nicht mehr verwendet oder vor ihrer Verwendung erneut zugewiesen wird.


program Produce;
(*$HINTS ON*)

procedure Simple;
var
  I: Integer;
begin
  I := 42;                (*<-- Hier der Hinweis*)
end;

procedure Propagate;
var
  I: Integer;
  K: Integer;
begin
  I := 0;                (*<-- Hier der Hinweis*)
  Inc(I);                 (*<-- Hier der Hinweis*)
  K := 42;
  while K > 0 do begin
    if Odd(K) then
      Inc(I);                 (*<-- Hier der Hinweis*)
    Dec(K);
  end;
end;

procedure TryFinally;
var
  I: Integer;
begin
  I := 0;                (*<-- Hier der Hinweis*)
  try
    I := 42;
  finally
    Writeln('Reached finally');
  end;
  Writeln(I);             (*Gibt immer 42 aus - bei einer Exception,
          wird die Anweisung nicht ausgeführt*)
end;

begin
end.

In der Prozedur Propagate erkennt der Compiler, dass die Variable I nach der while-Schleife nicht verwendet wird. Sie muss also in der Schleife nicht inkrementiert werden, und somit sind auch die Erhöhung und die Zuweisung vor der Schleife überflüssig.

In TryFinally wird die Zuweisung zu I vor dem try-finally-Block nicht benötigt. Da bei einer Exception die Anweisung Writeln am Ende nicht ausgeführt wird, ist der Wert von I nicht von Bedeutung. Wenn keine Exception auftritt, hat I in der Writeln-Anweisung immer den Wert 42. Somit wird durch die erste Zuweisung die Funktionsweise der Prozedur nicht geändert, und sie kann problemlos entfernt werden.

Diese Hinweismeldung bedeutet nicht, das Ihr Programm einen Fehler enthält. Der Compiler hat lediglich eine Zuweisung entdeckt, die nicht notwendig ist.

Sie können die Zuweisung einfach löschen. Sie wird bei aktivierter Optimierung sowieso aus dem compilierten Code entfernt.

Manchmal besteht das wirkliche Problem aber darin, dass Sie die falsche Variable zugewiesen haben (z. B. J statt I). Prüfen Sie daher die betreffende Zuweisung vor dem Entfernen.