W1012 範囲外の定数式です

提供: Appmethod Topics
移動先: 案内検索

エラーと警告のメッセージ(Object Pascal):インデックス への移動



このメッセージが出力されるのは、Object Pascal 4 リリース以降の Object Pascal で大きい符号なしの型が導入されたために、もともと有効だったけれども今では無効になった変換が行われた場合です。

たとえば、次のコードを見てください。

 var
    x: Integer;
 const
    y = Cardinal(MaxInt) + 1;
 begin
    x := y;
    Writeln(y); // writes 2147483648
    Writeln(x); // writes -2147483648
 end.

Cardinal が符号なしの 32 ビット整数として定義される前(Object Pascal 4 より前)には、Cardinal は範囲が 0..MaxInt の符号なしの 31 ビット整数でした。 そのため、Cardinal の範囲内の値はどれも、Integer の範囲内に納まっていました。 Object Pascal 4 以降では、Cardinal の範囲は完全な符号なし 32 ビットの 0..$FFFFFFFF になっています。 この範囲の上半分は Integer に変換できません。符号あり(2 の補数)と符号なしの整数の解釈方法が異なるため、Cardinal の最も大きい部分(MaxInt よりも大きい部分)は負の整数値に変換されてしまいます。

関連項目