これらのコンパイラ チェック ディレクティブをオンにすると、範囲チェック エラーとオーバーフロー エラーの両方が発生するコードの要約バージョンを次に示します。これがオーバーフローを引き起こす理由を理解しています.C1の乗算で、データ型の最大値を超える可能性があるようです. しかし、なぜこれが Range-check エラーを引き起こすのでしょうか? スタック オーバーフローに関する Delphi のドキュメントやその他の投稿では、範囲チェック エラーは通常、範囲外の配列アクセスで発生するように思われます。しかし、範囲チェックエラーを引き起こしていると言っている行の配列にアクセスしていません。おそらくparam1への割り当てにあるのでしょうか?しかし、もしそうなら、なぜそれは範囲チェックであり、オーバーフローエラーではないのでしょうか?
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;
関連する場合、デバッガーのその行で中断すると、Delphi に評価を依頼すると「宣言されていない識別子: 'param1'」と表示される param1 を除いて、すべての値が期待どおりに見えます。