我正在处理一些产生警告的宏。其中之一是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
来自哪里?
答案 0 :(得分:3)
警告是正确的;将long unsigned int
值转换为uint8_t
可以改变其值。
您可以通过不指定-Wconversion
选项(默认情况下未启用,因此必须设置它)或使用强制转换而不是隐式转换来禁止警告。如果没有更多信息,我无法准确说明应该添加演员阵容。
至于消息中提到的long unsigned int
类型,再次,如果没有看到更多代码,很难说。 uint32_t
可能是unsigned long int
的typedef - 但快速实验表明gcc的错误消息引用了声明的类型,即使它是typedef。