我为什么得到
重复的“ const”声明说明符[-Wduplicate-decl-specifier]
此声明?
extern uint8_t CalculateChecksum(const communicationBlock_t const *messageBlock);
communicationBlock_t
是一个结构。
我没有功能可以更改参数所指向的结构,也不希望它可以将该参数指向其他位置。
我做错了什么?
答案 0 :(得分:5)
您编写的两个const
关键字都适用于communicationBlock_t
。您可能想要这样:
extern uint8_t CalculateChecksum(const communicationBlock_t * const messageBlock);
规则是:const
适用于左侧,除非它是最左侧的说明符,否则适用于右侧。
答案 1 :(得分:2)
写就够了
uint8_t CalculateChecksum(const communicationBlock_t* messageBlock);
这意味着您不能更改所指向的内容。如果要阻止将指针分配给其他地址,则可以编写* const
。
但这不是必需的,messageBlock
是原始指针的本地副本,调用者不必在乎该函数在内部对其进行了什么操作。
这是样式问题:
有人认为,这可以通过保持函数内部常量常量的方式来增加额外的安全性。他们还认为写void func (const int n)
之类的东西在某种程度上是有意义的。许多宣扬这种风格的人都是C ++程序员,他们习惯const
来限定成员函数-这完全是另外的事情,无论如何都不能用C来完成。
其他人(像我一样)认为带有* const
的const限定参数被认为是不必要的混乱,这会使读者感到困惑,因为函数声明被视为函数调用者的文档,而不是实现者的文档。函数定义。