【问题标题】:Misra C rule 10.1 - false positive warning?Misra C 规则 10.1 - 误报警告?
【发布时间】:2015-12-09 19:32:48
【问题描述】:

我的 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
...

我的代码中没有发现问题。是误报还是我的错误?

【问题讨论】:

  • 似乎是一个错误的警告。你确定这是整个代码吗?没有const 或volatile 被扔进去吗?
  • 没有这样的修饰符。我在每个通过引用传递参数的函数调用中都得到了这些,但类型是正确的,就像在这个示例中一样。
  • 如果您忘记了& 地址操作符,该消息将是正确的。确定在那儿?
  • 是的 & 在那里,如果省略,示例将根本无法编译。代码正常工作,但也许 TI CCS Misra 检查器有问题?我问是因为我无法想象它会为这么简单的代码发出错误的警告。
  • 我想答案就在这里:stackoverflow.com/questions/32554813/…

标签: c misra


【解决方案1】:

是的,这是误报。 MISRA-C:2004 的规则 10.1 关注整数类型的隐式类型提升。指针与该规则无关。

尽管确保相邻的代码行都不包含实际问题,但该工具可能只是指向错误的行。

(我可以说是2004版本,因为它提到了底层类型。在2012版本中,底层类型的概念被替换了。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多