评估常量时的范围检查错误

时间:2014-02-10 14:25:44

标签: linux compiler-errors warnings freepascal range-checking

我遇到了很多编译器警告:

评估常量时

范围检查错误

我整个计划中的类似陈述。

TxMsg是一个字节。

GetRegs(0)返回WORD数据类型结果。

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

我在研究中发现,这个错误是由隐式类型转换引起的,你需要将int64类型转换为QWORD。如果是这样,那么你如何在我的代码行中做到这一点。

更新

fRegs:SmallInt的数组[0..20];

TxMsg:Byte的数组[0..8];

function GetReg(reg:Integer):word;
begin
   if reg <= RegCnt then
      result:=fRegs[reg];
end;

1 个答案:

答案 0 :(得分:0)

你说&#34;字节&#34;和&#34;字&#34;参与其中。两者都已经没有签名,所以我不知道int64和qword与它有什么关系。

要取消警告,只需将表达式的结果强制转换为byte:

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