我为什么要
重复的'const'声明说明符[-Wduplicate-decl-specifier]
为了这个宣言?
extern uint8_t CalculateChecksum(const communicationBlock_t const *messageBlock);
Run Code Online (Sandbox Code Playgroud)
communicationBlock_t结构在哪里。
我没有功能可以更改参数所指向的结构,也不希望它可以将该参数指向其他位置。
我做错了什么?
写就足够了
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认为是不必要的混乱,会让读者感到困惑,因为函数声明被视为函数调用者的文档,而不是函数定义的实现者的文档。
const您编写的两个关键字都适用于communicationBlock_t。您可能想要这样:
extern uint8_t CalculateChecksum(const communicationBlock_t * const messageBlock);
Run Code Online (Sandbox Code Playgroud)
规则是:const适用于左侧,除非它是最左侧的说明符,否则适用于右侧。
| 归档时间: |
|
| 查看次数: |
224 次 |
| 最近记录: |