gpt4 book ai didi

C 中用户定义数据类型的 const 说明符

转载 作者:太空宇宙 更新时间:2023-11-04 07:02:21 26 4
gpt4 key购买 nike

我有用户定义的数据类型

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);

constConnectCommand(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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com