我已经阅读了这个关于可疑截断的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位,但没有成功,但问题仍然存在。
你知道我会怎么做吗,或者这里出了什么问题?

最佳答案

this reference about the warning
例如:

(long) (n << 8)

如果n是无符号int,则可能会引发此消息,而
(long) n << 8

不会的。在第一种情况下,移位是以int精度完成的
高阶8位丢失,即使
随后转换为可能包含所有位的类型在
第二种情况,移位的位被保留。
这似乎正好符合你的情况,也告诉你如何解决它。

关于c - Lint Warning:#647:可疑截断,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39116944/

10-13 05:53