我正在处理一些产生警告的宏。其中之一是ConvToSector(x)
:
#define STARTSECTOR 0x0002000u
#define STARTLSB 6u
#define STARTNUM 7u
#define TRICKYLSB 3u
#define ConvToSector(x) (((x)>=STARTSECTOR) ? ((((x)-STARTSECTOR) >> STARTLSB) + STARTNUM) : ((x) >> TRICKYLSB))
生产
conversion to 'uint8_t' from 'long unsigned int' may alter its value [-Wconversion]
我知道所有常量都是无符号的,并且ConvToSector(x)的输入是无符号的整数(uint32_t)。那么哪里long unsigned int
来的呢?
警告是正确的;将long unsigned int
值转换为uint8_t
可以更改其值。
您可以通过不指定-Wconversion
选项(默认情况下未启用该选项,因此必须对其进行设置)或使用强制转换而不是隐式转换来禁止警告。没有更多信息,我无法确切确定应在哪里添加演员表。
同样,对于long unsigned int
消息中提到的类型,很难看到更多的代码。这很可能uint32_t
是typedef的unsigned long int
-但快速实验表明,即使gcc是typedef ,gcc的错误消息也会引用已声明的类型。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句