解决宏中的警告

时间:2014-11-12 15:02:11

标签: c macros gcc-warning

我正在处理一些产生警告的宏。其中之一是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来自哪里?

1 个答案:

答案 0 :(得分:3)

警告是正确的;将long unsigned int值转换为uint8_t可以改变其值。

您可以通过不指定-Wconversion选项(默认情况下未启用,因此必须设置它)或使用强制转换而不是隐式转换来禁止警告。如果没有更多信息,我无法准确说明应该添加演员阵容。

至于消息中提到的long unsigned int类型,再次,如果没有看到更多代码,很难说。 uint32_t可能是unsigned long int的typedef - 但快速实验表明gcc的错误消息引用了声明的类型,即使它是typedef。