【问题标题】:MISRA 2004 Required Rule 10.1, Prohibited Implicit Conversion: Non-constant argument to functionMISRA 2004 要求的规则 10.1,禁止隐式转换:函数的非常量参数
【发布时间】:2015-10-30 05:12:03
【问题描述】:

我正在更改我的代码以符合 MISRA 标准。我遇到了警告

必需的规则 10.1,禁止的隐式转换:函数的非常量参数。

memcpy(&Final_buff[index], Main_cal, buffer_size);
// where buffer_size is uint8, uint8 *Final_buff, and const uint8 *buffer

然后我在上面换了个小测试:

memcpy(&Final_buff[index], Main_cal, 12u);

被 MISRA 接受。问题是我无法对那里的值进行硬编码。我怎样才能摆脱这个警告?

【问题讨论】:

  • 显示Final_buff、Main_cal和buffer_size的声明。
  • @work.bin,我已经编辑过了。它是 uint8 *Final_buff
  • 也显示 Main_cal 的声明并提及您已经尝试过的类型转换。
  • @harper,但 Current Misra 正在对“buffer_size”发出警告
  • 为什么你使用uint8_t作为缓冲区大小?

标签: c misra


【解决方案1】:

这应该可以解决您的 MISRA 问题:

memcpy(&Final_buff[index], Main_cal, (size_t) buffer_size);

规则 10.1 不允许在几种情况下进行隐式转换,包括“表达式不是常量并且是函数参数”,这是您遇到的情况。

【讨论】:

    猜你喜欢
    • 2016-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-20
    • 1970-01-01
    • 2015-12-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多