我遇到了很多编译器警告:
评估常量时发生范围检查错误
对于整个程序中的类似语句。
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/