我已经阅读了这个关于可疑截断的Lint警告的相关问题,但是这里是一个纯C的案例。
以下行是弹出Warning #647
的位置:
pCont->sig -= (signed int64_t)((sub2 << 8)/pCont->freq + 1);
其中
pCont->sig
也是64位有符号的(类型signed int64_t
),并且sub2
和freq
都是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/