2014-02-10 3 views
0

Я бегу в много предупреждений компилятора:Диапазон при оценке констант

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

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

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; 

ответ

0

Вы говорите, что задействованы «байт» и «слово». Оба уже без знака, поэтому я не знаю, что с ним делают int64 и qword.

Чтобы подавить предупреждение, просто трудно привести результат слова выражения к байту:

TxMsg[0] := byte((GetRegs(0) shr 8) and $0F); 
+0

Когда я внести изменения и запустить его, как вы предложили, я все еще получаю предупреждение компилятора. Когда я нажимаю на ошибку, курсор сидит в TxMsg [| 0]. Обратите внимание на вертикаль, как рядом с Zero. Вот где это. Есть идеи? – ThN

+0

Покажите декларацию fuull txmsg и getregs. Без этого, это догадка –

+0

Хорошо, я обновил запрошенную вами информацию. – ThN

Смежные вопросы