W1036 Variable '%s' ist möglicherweise nicht initialisiert worden (Delphi)

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Fehler- und Warnungsmeldungen (Delphi)

Diese Warnung wird angezeigt, wenn einer Variablen nicht in jedem Codepfad, der zu der Stelle führt, an der sie verwendet wird, ein Wert zugewiesen wird.

  program Produce;
 (*$WARNINGS ON*)
 var
   B : Boolean;
   C: (Red,Green,Blue);
 
 procedure Simple;
 var
   I: Integer;
 begin
   Writeln(I);        (* <-- Hier die Warnmeldung *)
 end;
 
 procedure IfStatement;
 var
   I: Integer;
 begin
   if B then
     I := 42;
   Writeln(I);        (* <-- Hier die Warnmeldung *)
 end;
 
 procedure CaseStatement;
 var
   I: Integer;
 begin
   case C of
   Red..Blue: I := 42;
   end;
   Writeln(I);        (* <-- Hier die Warnmeldung *)
 end;
 
 procedure TryStatement;
 var
   I: Integer;
 begin
   try
     I := 42;
   except
     Writeln('Should not get here!');
   end;
   Writeln(I);        (* <-- Hier die Warnmeldung *)
 end;
 
 begin
   B := False;
 end.

Sie müssen in einer if-Anweisung sicherstellen, dass die Variable in beiden Verzweigungen zugewiesen wird. Bei einer case-Anweisung muss ein else-Abschnitt hinzugefügt werden, damit die Variable in jedem möglichen Fall einen Wert erhält. Bei einem try-except-Konstrukt geht der Compiler davon aus, dass die Anweisungen im try-Abschnitt auch dann nicht ausgeführt werden, wenn Sie sich am Anfang des Abschnitts befinden und so einfach sind, dass eigentlich keine Exception auftreten kann.

 program Solve;
 (*$WARNINGS ON*)
 var
   B : Boolean;
   C: (Red,Green,Blue);
 
 procedure Simple;
 var
   I: Integer;
 begin
   I := 42;
   Writeln(I);
 end;
 
 procedure IfStatement;
 var
   I: Integer;
 begin
   if B then
     I := 42
   else
     I := 0;
   Writeln(I);        (* I muss im else-Abschnitt zugewiesen werden *)
 end;
 
 procedure CaseStatement;
 var
   I: Integer;
 begin
   case C of
   Red..Blue: I := 42;
   else       I := 0;
   end;
   Writeln(I);        (* I muss im else-Abschnitt zugewiesen werden *)
 end;
 
 procedure TryStatement;
 var
   I: Integer;
 begin
   I := 0;
   try
     I := 42;
   except
     Writeln('Should not get here!');
   end;
   Writeln(I);        (* I muss vor try-Abschnitt zugewiesen werden *)
 end;
 
 begin
   B := False;
 end.

Die Lösung besteht entweder darin, Zuweisungen zu allen Quelltextpfaden hinzuzufügen, oder die Variable bereits vor einer Bedingungsanweisung oder einem try-except-Konstrukt zuzuweisen.