W1021 比較結果は常に False に評価されます (Delphi)
エラーと警告のメッセージ(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 と等しいかそれより大きい値になることはない }