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

评估常量时发生范围检查错误

对于整个程序中的类似语句。

TxMsg是一个字节。

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

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

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

更新:

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

TxMsg:字节的数组[0..8];
function GetReg(reg:Integer):word;
begin
   if reg <= RegCnt then
      result:=fRegs[reg];
end;

最佳答案

您说涉及“字节”和“字”。两者都已经是无符号的,所以我不知道int64和qword与它有什么关系。

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

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

关于linux - 评估常数时的范围检查错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21679774/

10-13 02:38