在 XC8 (v1.44) 项目中编写一些位掩码值时,我发现了这种相当奇怪的行为:
1: uint8_t foo;
2: foo = 0x01;
3: foo = 0x01 | 0x02;
4: foo = 0x01 | 0x02 | 0x04;
5: foo = 0x01 | 0x02 | 0x04 | 0x08;
第 3 行和第 5 行发出警告:
警告:(752)转换为更短的数据类型
虽然第 4 行没有。我知道在执行 OR 操作之前操作数被提升为 int ,这就是缩小警告的来源。但是,为什么它只在某些行上发出警告而不在其他行上发出警告?
是否有某种晦涩的 C 规则在起作用,或者这只是一个编译器错误?