Tho*_*ews 2 c printf type-conversion misra format-specifiers
我从静态分析工具中收到有关以下代码段的错误:
uint8_t value = 24U;
char buffer[512];
int chars_printed = snprintf(buffer, sizeof(buffer),
"The value in hex is 0x%02hhX\r\n",
value);
Run Code Online (Sandbox Code Playgroud)
错误是:
MISRA-2004规则10.1违规:隐式转换函数参数中的非常量表达式.将"value"与基础类型"unsigned char"(8位,无符号)转换为类型"int"(32位,有符号).
MISRA期望从"%X"说明符获得的签名和位宽是多少?
据说"%X" unsigned int来自cppreference页面.
IAR编译器的MISRA C 2004检查程序没有错误.
这个来自Coverity.
问题是printf系列隐式地将小整数类型的所有参数提升为int.规则10.1不允许这种隐式类型促销,这就是您收到MISRA违规错误的原因.它与格式说明符无关.
对于MISRA兼容性,只需在将值传递给函数之前将其显式转换为:(uint32_t)value.
另请注意,MISRA不允许您在生产代码中使用stdio.h.
| 归档时间: |
|
| 查看次数: |
608 次 |
| 最近记录: |