W1036 変数 '%s' は初期化されていない可能性があります (Delphi)
エラーと警告のメッセージ(Delphi) への移動
この警告は、変数に値が割り当てられていない場合に、それが使用されるポイントへ導くコード パスにくるたびに表示されます。
program Produce;
(*$WARNINGS ON*)
var
B: Boolean;
C: (Red,Green,Blue);
procedure Simple;
var
I : Integer;
begin
Writeln(I); (* <-- ここで警告 *)
end;
procedure IfStatement;
var
I : Integer;
begin
if B then
I := 42;
Writeln(I); (* <-- ここで警告 *)
end;
procedure CaseStatement;
var
I: Integer;
begin
case C of
Red..Blue: I := 42;
end;
Writeln(I); (* <-- ここで警告 *)
end;
procedure TryStatement;
var
I: Integer;
begin
try
I := 42;
except
Writeln('Should not get here!');
end;
Writeln(I); (* <-- ここで警告 *)
end;
begin
B := False;
end.
if 文では、変数が分岐の両方で、割り当てられていなければなりません。case 文では、else 部を追加し、想定されるすべてのケースにおいて、変数に値が割り当てられるようにしなければなりません。try-except 構造文では、コンパイラは、try 部での割り当ては実際には行われなかった、と想定します。これは、割り当て処理が try 部の一番最初の部分にあり、例外を起こすことは考えられないほど単純だとしてもです。
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); (* else 部で I の割り当て処理が必要 *)
end;
procedure CaseStatement;
var
I: Integer;
begin
case C of
Red..Blue: I := 42;
else I := 0;
end;
Writeln(I); (* else 部で I の割り当て処理が必要 *)
end;
procedure TryStatement;
var
I: Integer;
begin
I := 0;
try
I := 42;
except
Writeln('Should not get here!');
end;
Writeln(I); (* try の前に I の割り当てが必要 *)
end;
begin
B := False;
end.
解決策は、割り当てが欠落しているコード パスに割り当て処理を追加するか、条件文や try-except 構造文の前に、割り当て処理を追加します。