将定义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
,因此您正在比较int
与uint8_t
。
比较本身会导致隐式提升int
,但在任何情况下总是假的,因为 256 不能用uint8_t
表示。
目前尚不清楚适当的解决方案是什么,但如果uint8_t
变量的所有值都有效,则测试没有任何用途,并且天真地更改为更大的类型实际上可能会通过允许分配无效值来引入错误。