System.SysUtils.ERangeError

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

System.SysUtils.EIntErrorSystem.SysUtils.EExternalSystem.SysUtils.ExceptionSystem.TObjectERangeError

Delphi

ERangeError = class(EIntError);

C++

class PASCALIMPLEMENTATION ERangeError : public EIntError

プロパティ

種類 可視性 ソース ユニット
class public
System.SysUtils.pas
System.SysUtils.hpp
System.SysUtils System.SysUtils


説明

ERangeError は、整数の範囲違反を示します。

ERangeError は、Delphi コードで範囲チェックが有効になっていて、順序値が宣言された範囲からはみ出した場合に発生します。 デフォルトで、Delphi コンパイラの範囲チェックは無効になっています。 明らかな範囲エラーはコンパイラで常に検出できるため、次のコードはコンパイルが成功しません。

メモ: 範囲チェックは C++ の機能に含まれません。 ただし、C++ コードで Delphi コードを呼び出している場合には、ERangeError が発生する可能性があります。

例 1(コンパイル時のチェック):

 var
   SmallValue: 1 .. 3;
   SevenBits: byte;
 
 begin
   SmallValue := 4; // E1012 Constant expression violates subrange bounds
   SevenBits := 256; // E1012 Constant expression violates subrange bounds
 
   // ...

範囲外の値が実行時に渡されることをコンパイラが予想することはできません。


例 2(実行時のチェック):

 var
   SmallValue: 1 .. 3;
   SevenBits: byte;
   ThirtyTwoBits: Integer;
 
 begin
   ThirtyTwoBits := 4;
   SmallValue := ThirtyTwoBits; // Assigns 4 to SmallValue (SmallValue is stored as a Byte)
 
   ThirtyTwoBits := 256;
   SevenBits := ThirtyTwoBits; // Assigns 0 to SevenBits (high-order bits discarded)
 
   // ...

例 2 で範囲チェックを有効にすると、範囲外の値を代入している両方の箇所で ERangeError 例外が送出されます。

範囲チェックを有効にするには、IDE のプロジェクト オプションか、$R+ 指令を使用します。

範囲チェックはデバッグ機能と見なされています。 範囲チェックを有効にすると、実行可能ファイルのサイズが大きくなり、実行速度が低下します。

関連項目