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
),并且 sub2
和 freq
都是 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.
这似乎符合您的情况完全并且还向您展示了如何修复它。
我已经阅读了这个关于可疑截断的 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
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.
这似乎符合您的情况完全并且还向您展示了如何修复它。