Я получаю ошибки от нашего инструмента статического анализа по поводу следующего фрагмента:
uint8_t value = 24U;
char buffer[512];
int chars_printed = snprintf(buffer, sizeof(buffer),
"The value in hex is 0x%02hhX\r\n",
value);
Ошибка:
Нарушение правила 10.1 MISRA-2004: неявное преобразование непостоянного выражения в аргумент функции. Преобразование «значения» с базовым типом «unsigned char» (8 бит, без знака) в тип «int» (32 бита, со знаком).
Какой подписи и разрядности ожидает MISRA от спецификатора "% X"?
Считается, что "% X" берет unsigned int
со страницы cppreference page. .
В программе проверки MISRA C 2004 компилятора IAR нет ошибок.
Эта ошибка от Coverity.
snprintf
принимает список аргументов с переменным числом аргументов, поэтомуvalue
будет продвигаться целиком. Вы можете отключить предупреждение, применив(unsigned)value
- person Praetorian   schedule 28.04.2015int
, он будет повышен доint
. Прочтите раздел преобразований по умолчанию, здесь. - person Praetorian   schedule 28.04.2015