Lint 警告:#647:可疑截断

Lint Warning: #647: Suspicious truncation

我已经阅读了这个关于可疑截断的 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

For example:

(long) (n << 8)

might elicit this message if n is unsigned int, whereas

(long) n << 8

would not. In the first case, the shift is done at int precision and the high order 8 bits are lost even though there is a subsequent conversion to a type that might hold all the bits. In the second case, the shifted bits are retained.

这似乎符合您的情况完全并且还向您展示了如何修复它。