Вот сокращенная версия некоторого кода, который вызывает как ошибку проверки диапазона, так и ошибку переполнения, если я включу эти директивы проверки компилятора. Я понимаю, почему это может привести к переполнению при умножении 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, который показывает «Необъявленный идентификатор :'param1'», когда я прошу Delphi оценить его.