我有用户定义的数据类型
typedef Unsigned int8 COMMAND_TYPE[6];
现在我有类似的功能
ConnectCommand(COMMAND_TYPE const command)
{
}
当尝试运行静态分析器检查时,我收到 Misra 警告“指针参数‘command’寻址的对象未被修改,因此指针可能是‘指向常量的指针’类型”
这违反了 Misra 规则 16.7
虽然使用了 const 说明符,但 misra 规则 checkin 工具似乎没有在此处看到它,为什么?
最佳答案
确定这是静态分析器检查问题。
下面做同样的事情,两者都应该通过你的检查。
ConnectCommand(COMMAND_TYPE const command)
ConnectCommand(const COMMAND_TYPE command)
虽然是合法的代码,但使用了typedef
一个数组,混淆了你的检查器。 IMO,这是一种最好避免的设计风格。
制作此社区 wiki 以供引用。一旦出现好的答案,建议删除。
<罢工>罢工>
<罢工>经过审查,我怀疑问题出在 Misra - 它给出了错误警告。 #2 和下面评论的#3 做同样的事情。 #4 与#2、#3 是多余的。
我将删除此答案或重新正确处理它。
建议尝试
typedef Unsigned int8 COMMAND_TYPE[6];
typedef const Unsigned int8 CONST_COMMAND_TYPE[6];
void ConnectCommand(CONST_COMMAND_TYPE command) {
...
}
COMMAND_TYPE c;
ConnectCommand(c);
const
在 ConnectCommand(COMMAND_TYPE const command) { ...}
指的是 const
command
. command
是指向 COMMAND_TYPE
类型对象的指针. const command
暗示指针不应在 ConnectCommand()
中更改函数体。
警告“... type pointer to const”中的“const”建议使用 const
command
指向的对象类型 .这是因为command
指向的数据没有改变。
// add could drop this const
// | |
ConnectCommand(const COMMAND_TYPE const command)
罢工><罢工>罢工>
关于C 中用户定义数据类型的 const 说明符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36481524/