如果我打开那些编译器检查指令,这是一些导致范围检查错误和溢出错误的代码的精简版本。我理解为什么这会导致溢出,在 C1 的乘法中,它似乎可能超过数据类型的最大值。但是为什么这也会触发范围检查错误呢?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;
如果它是相关的,当它在调试器中的该行中断时,所有值看起来都符合预期,除了 param1,当我要求 Delphi 评估它时,它显示“未声明的标识符:'param1'”。