皮棉警告:#647:可疑截断

时间:2016-08-24 07:26:40

标签: c lint truncation armcc

我已经阅读了有关可疑截断的Lint警告的相关问题,但这里纯粹是C案例。

以下行是弹出Warning #647的地方:

pCont->sig -= (signed int64_t)((sub2 << 8)/pCont->freq + 1);

其中pCont->sig也是64位签名(类型signed int64_t),sub2freq都是32位无符号。所有这些都是用armcc编译的。

已经尝试将1转换为无符号32位但没有成功,但问题仍然存在。

关于我可能会尝试什么,或者这里出了什么问题的任何想法?

1 个答案:

答案 0 :(得分:4)

来自this reference about the warning

  

例如:

(long) (n << 8)
     如果n是unsigned int,

可能会引出此消息,而

(long) n << 8
     

不会。在第一种情况下,移位以int精度完成   即使存在a,高阶8位也会丢失   后续转换为可能包含所有位的类型。在   第二种情况,保留移位的位。

这似乎符合您的情况完全并且还会告诉您如何修复它。