皆繼承自 EIntError,執行期引發三子類別:
| 異常類別 | 觸發原因 |
|---|---|
| EDivByZero | 嘗試除以零 |
| ERangeError | 整數運算式超出特定型別範圍 |
| EIntOverFlow | 整數運算溢出 |
整數運算式值超過特定整數型別分配範圍時觸發。特定整數型別含 ShortInt、Byte、相容整數的列舉型別、布林型別等。
var SmallNumber: ShortInt; X, Y: Integer;
begin
X := 100; Y := 75;
SmallNumber := X * Y; { 7500 > 127,引發 ERangeError }
end;
type THazard = (Safety, Marginal, Critical, Catastrophic);
var Haz: THazard; Item: Integer;
begin
Item := 4;
Haz := THazard(Item); { 列舉值 0~3,4 越界引發 ERangeError }
end;
var Values: array[1..10] of Integer; i: Integer;
begin
for i := 1 to 11 do
Values[i] := i; { i=11 越界引發 ERangeError }
end;
關鍵:ERangeError 僅在型別檢查開啟時引發。程式碼加入 {$R+} 或 IDE Options | Project | Range Checking 勾選啟用。
Integer、Word、Longint 三型別越界時引發。例:
var I: Integer; a, b, c: Word;
begin
a := 10; b := 20; c := 1;
for I := 0 to 100 do
c := a * b * c; { 迅速超出 Word 範圍 0~65535,引發 EIntOverFlow }
end;
僅在編譯選項 Options | Project | Overflow Checking 勾選時產生。關閉溢位檢查時,溢位後變數保留該型別最大範圍值。
| 型別 | 範圍 | 格式 |
|---|---|---|
| Shortint | -128 .. 127 | 有號 8 位元 |
| Integer | -32768 .. 32767 | 有號 16 位元 |
| Longint | -2147483648 .. 2147483647 | 有號 32 位元 |
| Byte | 0 .. 255 | 無號 8 位元 |
| Word | 0 .. 65535 | 無號 16 位元 |