Misra C 规则 10.1 - 误报警告?
Misra C rule 10.1 - false positive warning?
我的 CCS 6.1 ARM 编译器(适用于 LM3Sxxxx Stellaris)发出警告:
"MISRA 规则 10.1。整数类型表达式的值不得隐式转换为不同的基础类型,如果表达式是
不是常量,是一个函数参数
以下代码:
static uint32_t diagBaseAddress;
void diagCbGetBaseAddress(uint32_t * addr);
...
diagCbGetBaseAddress(&diagBaseAddress); // line where warning is issued
...
我没有发现我的代码有问题。是误报还是我的bug?
是的,这是误报。 MISRA-C:2004 的规则 10.1 关注整数类型的隐式类型提升。指针与该规则无关。
尽管确保 none 相邻代码行包含实际问题,但该工具可能只是指向了错误的代码行。
(我可以说是2004版,因为它提到了底层类型。在2012版中,底层类型的概念被替换了。)
我的 CCS 6.1 ARM 编译器(适用于 LM3Sxxxx Stellaris)发出警告:
"MISRA 规则 10.1。整数类型表达式的值不得隐式转换为不同的基础类型,如果表达式是 不是常量,是一个函数参数
以下代码:
static uint32_t diagBaseAddress;
void diagCbGetBaseAddress(uint32_t * addr);
...
diagCbGetBaseAddress(&diagBaseAddress); // line where warning is issued
...
我没有发现我的代码有问题。是误报还是我的bug?
是的,这是误报。 MISRA-C:2004 的规则 10.1 关注整数类型的隐式类型提升。指针与该规则无关。
尽管确保 none 相邻代码行包含实际问题,但该工具可能只是指向了错误的代码行。
(我可以说是2004版,因为它提到了底层类型。在2012版中,底层类型的概念被替换了。)