XC8 中的不匹配比较

mismatched comparison in XC8

将定义 EUSART_BUFFER_SIZE 与类型 uint8_t 的变量 eusart_rx_buffer_rd 进行比较时的不匹配比较。但是,如果变量的类型更改为 uint16_t,则警告消失。为什么?

#define EUSART_BUFFER_SIZE 256
uint8_t eusart_rx_buffer_rd = 0;            

if (eusart_rx_buffer_rd >= EUSART_BUFFER_SIZE)                 
 {
     eusart_rx_buffer_rd = 0;
 }

文字常量 256 的隐式类型是 int,因此您正在比较 intuint8_t

比较本身导致对 int 的隐式提升,但在任何情况下 总是 错误,因为 256 不能用 uint8_t 表示。

目前尚不清楚合适的解决方案是什么,但如果 uint8_t 变量的所有值都有效,则测试没有任何意义,对更大类型的天真更改实际上可能会引入错误通过允许分配无效值。