несоответствие сравнения в XC8 - PullRequest
0 голосов
/ 08 октября 2019

Несоответствующее сравнение, когда определение EUSART_BUFFER_SIZE сравнивается с переменной eusart_rx_buffer_rd типа uint8_t. Но если тип переменной изменить на 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;
 }

1 Ответ

1 голос
/ 08 октября 2019

Неявный тип литеральной константы 256 равен int, поэтому вы сравниваете int с uint8_t.

Само сравнение вызывает неявное повышение до int, но в любом случае всегда ложно, поскольку 256 не может быть представлено uint8_t.

ЭтоНепонятно, каким может быть соответствующее решение, но если все значения переменной uint8_t являются действительными, тест не имеет смысла, и наивное изменение более крупного типа может фактически привести к ошибкам, позволяя присваивать недопустимые значения.

...