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版中,底层类型的概念被替换了。)