我从我们的静态分析工具中收到有关以下代码段的错误:
uint8_t value = 24U;
char buffer[512];
int chars_printed = snprintf(buffer, sizeof(buffer),
"The value in hex is 0x%02hhX\r\n",
value);
错误是:
MISRA-2004 违反规则 10.1:隐式转换函数参数中的非常量表达式。将底层类型为“unsigned char”(8 位,无符号)的“值”转换为类型“int”(32 位,有符号)。
MISRA 对“%X”说明符的期望符号和位宽是多少?
据说“%X”unsigned int
取自cppreference page。
IAR 编译器的 MISRA C 2004 检查器没有错误。
这个来自 Coverity。