W1036 Variable '%s' ist möglicherweise nicht initialisiert worden (Delphi)
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.