W1037 for ループ脱出後のループ制御変数 '%s' の値は不定です (Delphi)
エラーと警告のメッセージ(Delphi):インデックス への移動
この警告は for ループの制御変数の値をループの後に使った場合に表示されます。
for ループの制御変数の最終値をあてにしてもよいのは,goto 文か Exit 文でループを出た場合だけです。
これはコンパイラが for ループに効率的なコードを生成できるようにするための制約事項です。
program Produce; (*$WARNINGS ON*) function Search(const A: array of Integer; Value: Integer): Integer; begin for Result := 0 to High(A) do if A[Result] = Value then break; end; const A : array [0..9] of Integer = (1,2,3,4,5,6,7,8,9,10); begin Writeln( Search(A,11) ); end.
{ このコードではループの後で Result 変数が暗黙に使用されているが,ループを完了した場合,Result は未定義となる。そのために警告が表示される }
program Solve; (*$WARNINGS ON*) function Search(const A: array of Integer; Value: Integer): Integer; begin for Result := 0 to High(A) do if A[Result] = Value then exit; Result := High(a)+1; end; const A : array [0..9] of Integer = (1,2,3,4,5,6,7,8,9,10); begin Writeln( Search(A,11) ); end.
{ ループを完了した場合に備えて,意図する値を単に制御変数へ代入すれば解決する }