Ошибка проверки диапазона при оценке констант
Я сталкиваюсь с большим количеством предупреждений компилятора:
Ошибка проверки диапазона при оценке констант
для подобных утверждений по всей моей программе.
TxMsg - это байт.
GetRegs (0) возвращает результат типа данных WORD.
TxMsg[0] := (GetRegs(0) shr 8) and $0F;
Что я обнаружил в своем исследовании, так это то, что эта ошибка вызвана неявным приведением типов и что вам необходимо преобразовать тип int64 в QWORD. Если так, то как ты это делаешь здесь, в моей строке кода.
ОБНОВИТЬ:
fRegs: Array [0..20] для SmallInt;
TxMsg: массив [0..8] байта;
function GetReg(reg:Integer):word;
begin
if reg <= RegCnt then
result:=fRegs[reg];
end;
1 ответ
Вы говорите, что "байты" и "слова" участвуют. Оба они уже без знака, так что я не знаю, что с ними делать int64 и qword.
Чтобы подавить предупреждение, просто жестко приведите слово-результат выражения к байту:
TxMsg[0] := byte((GetRegs(0) shr 8) and $0F);