GCC C 警告 "duplicate ‘const’ declaration "

GCC C warning "duplicate ‘const’ declaration "

为什么我得到

duplicate ‘const’ declaration specifier [-Wduplicate-decl-specifier]

这个声明?

extern uint8_t CalculateChecksum(const communicationBlock_t const *messageBlock);

其中 communicationBlock_t 是一个结构。

我不希望该函数能够更改参数指向的结构,也不希望它能够将该参数指向其他地方。

我做错了什么?

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

extern uint8_t CalculateChecksum(const communicationBlock_t * const messageBlock);

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

写就够了

uint8_t CalculateChecksum(const communicationBlock_t* messageBlock);

这意味着您无法更改 pointed-at 内容。如果你想阻止一个指针被分配到一个不同的地址,你可以写 * const

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

这是风格问题:

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

其他人(比如我)认为带有 * const 的 const 限定参数被认为是混淆 reader 的不必要的混乱,因为函数声明将被视为调用者的文档函数,不适用于函数定义的实现者。