Range CheckエラーとOverflowエラーの両方を引き起こすコードの圧縮バージョンです。これらのコンパイラチェックディレクティブを有効にする必要があります。なぜこれがオーバーフローを引き起こすのか理解しています。C1の乗算では、データ型の最大値を超える可能性があります。しかし、なぜこれもRange-checkエラーを引き起こすでしょうか? Delphiのドキュメントやスタックオーバーフローに関するその他の記事では、範囲チェックエラーは通常、範囲外の配列アクセスのために発生します。しかし、私はレンジチェックエラーの原因となっている行の配列にアクセスしていません。おそらくparam1への割り当てに?しかし、なぜそれが範囲チェックで、オーバーフローエラーではないでしょうか?Range Check Error(デルファイ)の原因
const
C1 = 44001;
C2 = 17999;
function fxnName(..other params...; param1: Word): String;
var
someByte: byte;
begin
// some code
// by now we're in a loop. the following line is where it breaks to in the debugger:
param1 := (someByte + param1) * C1 + C2;
// more code
end;
それは、関連するなら、それはデバッガでその行に分割したときに予想されるように、すべての値が「未定義の識別子: 『PARAM1』」を示しPARAM1、を除いて、見て、私はそれを評価するためにデルファイを要求したとき。
私は範囲チェックがオーバーフローチェックの前に発生したからといって、それはだ疑いがある、と思い範囲に一度チェック例外が発生した場合、オーバーフローチェックは発生しません。 (順序がわからないので疑いの余地があります。) –