Ошибка проверки диапазона при оценке констант

Я сталкиваюсь с большим количеством предупреждений компилятора:

Ошибка проверки диапазона при оценке констант

для подобных утверждений по всей моей программе.

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);
Другие вопросы по тегам