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

Maw*_*awg 1 c gcc gcc-warning

我为什么要

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

为了这个宣言?

extern uint8_t CalculateChecksum(const communicationBlock_t const *messageBlock);
Run Code Online (Sandbox Code Playgroud)

communicationBlock_t结构在哪里。

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

我做错了什么?

Lun*_*din 7

写就足够了

uint8_t CalculateChecksum(const communicationBlock_t* messageBlock);
Run Code Online (Sandbox Code Playgroud)

这意味着您无法更改指向的内容。如果您想阻止指针被分配到不同的地址,您可以编写* const.

但这在这里不是必需的,messageBlock是原始指针的本地副本,调用者不应该关心该函数在内部对它做了什么。

这是一个风格问题:

有些人认为,这通过保持函数内部的 const 限定以某种方式增加了额外的安全性。他们还认为,编写诸如 之类的东西在某种程度上是有意义的void func (const int n)。许多宣扬这种风格的人都是 C++ 程序员,他们用来const限定成员函数——这完全是另一回事,而且无论如何也不能在 C 中完成。

其他人(比如我)认为 const 限定参数被* const认为是不必要的混乱,会让读者感到困惑,因为函数声明被视为函数调用者的文档,而不是函数定义的实现者的文档。


Rei*_*ica 5

const您编写的两个关键字都适用于communicationBlock_t。您可能想要这样:

extern uint8_t CalculateChecksum(const communicationBlock_t * const messageBlock);
Run Code Online (Sandbox Code Playgroud)

规则是:const适用于左侧,除非它是最左侧的说明符,否则适用于右侧。