GCC C警告“重复的'const'声明”

时间:2019-05-21 07:34:53

标签: c gcc gcc-warning

我为什么得到

  

重复的“ const”声明说明符[-Wduplicate-decl-specifier]

此声明?

extern uint8_t CalculateChecksum(const communicationBlock_t const *messageBlock);

communicationBlock_t是一个结构。

我没有功能可以更改参数所指向的结构,也不希望它可以将该参数指向其他位置。

我做错了什么?

2 个答案:

答案 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限定参数被认为是不必要的混乱,这会使读者感到困惑,因为函数声明被视为函数调用者的文档,而不是实现者的文档。函数定义。