W1021 比較結果は常に False に評価されます (Delphi)

提供: RAD Studio
移動先: 案内検索

エラーと警告のメッセージ(Delphi) への移動

コンパイラは式が常に False に評価されると判断しました。特定の変数型に対する境界テスト(たとえば $80000000 に対する Integer)の結果によって発生しやすい警告です。

バージョン 12.0 より前の Delphi コンパイラでは 16 進定数 $80000000 は負の Integer 値でしたが,Int64 型の採用により,$80000000 は正の Int64 型となりました。この結果,Integer 変数に対するこの定数の比較は以前とは違う動作になります。

これはエラーというより警告なので,標準的な対処法はありません。警告を無視できる場合もありますが,コードを書き直さなければならないこともあります。


program Produce;

  var
    i : Integer;
    c : Cardinal;

begin
  c := 0;
  i := 0;
  if c < 0 then
    Writeln('false');

  if i >= $80000000 then
    Writeln('false');
end.

{ ここでは,2 つの式が常に False になるとコンパイラが判定した。最初の Cardinal は符号なし型であり,0 より小さくなることはない。2 番めの 32 ビット Interger 値は,$80000000 の Int64 と等しいかそれより大きい値になることはない }