Barr C 编码标准背后的原因:为什么在指针声明中星号周围有空格?

问题描述 投票:0回答:1

Barr C 编码标准 2018 具有规则 3.1e:

指针运算符 * 和 & 之间应留有空格 声明中的每一侧,但除此之外没有空格 操作数端。

这条规则的推理相当模糊:

推理:在源代码中,空白的位置如下 与文本的位置一样重要。充分利用空白可以减少 眼睛疲劳并提高程序员和审阅者的能力 用于发现潜在错误的代码。

我想在星号两侧放置空格是否有更准确的原因?
在声明中,我个人更喜欢将星号直接写在变量名前面:

int *pBuffer;

这样我想就可以立即清楚星号属于哪里了。特别是为了避免歧义,如果有人试图在一行中声明多个指针:

int * pBuffer, pReceive;    // pBuffer is actual pointer, pReceive is not

但我认为巴尔人的统治有一些真正的理由。有人可以告诉我为什么这种格式可能有意义吗?

c pointers formatting
1个回答
0
投票

首先,我对规则中的措辞有一个小问题:指针声明符中的

*
不是运算符;只有
*
引用运算符是,因为它实际上执行了一个操作。

虽然我不知道为什么 Barr 有这条规则,但我个人更喜欢它,因为它与更复杂的声明保持一致:

int const volatile * const volatile foo = ...;  // Looks nice
int const volatile *const volatile foo = ...;   // Looks awkward

在同一个声明中声明多个变量不是一个好习惯,尤其是对于复杂的指针:

int volatile * const foo, const bar; // What?!
© www.soinside.com 2019 - 2024. All rights reserved.