如果我打开那些编译器检查指令,这是一些导致范围检查错误和溢出错误的代码的精简版本.我理解为什么这会导致溢出,在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;
Run Code Online (Sandbox Code Playgroud)
如果它是相关的,当它在调试器中的那一行中断时,除了param1之外,所有值都按预期显示,当我要求Delphi评估它时,它显示"未声明的标识符:'param1'".