MISRA C 2004 10.1,printf"%x"

时间:2015-04-27 23:59:13

标签: c printf type-conversion format-specifiers misra

我从静态分析工具中收到有关以下代码段的错误:

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"据说从example pen获取unsigned int

IAR编制者的MISRA C 2004检查程序没有错误 这个来自Coverity。

1 个答案:

答案 0 :(得分:5)

问题是printf系列隐式地将小整数类型的所有参数提升为int。规则10.1不允许这种隐式类型促销,这就是您收到MISRA违规错误的原因。它与格式说明符无关。

对于MISRA兼容性,只需在将值传递给函数之前显式转换值:(uint32_t)value

请注意,MISRA不允许您在生产代码中使用stdio.h。