Barr C 编码标准 2018 具有规则 3.1e:
指针运算符 * 和 & 之间应留有空格 声明中的每一侧,但除此之外没有空格 操作数端。
这条规则的推理相当模糊:
推理:在源代码中,空白的位置如下 与文本的位置一样重要。充分利用空白可以减少 眼睛疲劳并提高程序员和审阅者的能力 用于发现潜在错误的代码。
我想在星号两侧放置空格是否有更准确的原因?
在声明中,我个人更喜欢将星号直接写在变量名前面:
int *pBuffer;
这样我想就可以立即清楚星号属于哪里了。特别是为了避免歧义,如果有人试图在一行中声明多个指针:
int * pBuffer, pReceive; // pBuffer is actual pointer, pReceive is not
但我认为巴尔人的统治有一些真正的理由。有人可以告诉我为什么这种格式可能有意义吗?
首先,我对规则中的措辞有一个小问题:指针声明符中的
*
不是运算符;只有 *
引用运算符是,因为它实际上执行了一个操作。
虽然我不知道为什么 Barr 有这条规则,但我个人更喜欢它,因为它与更复杂的声明保持一致:
int const volatile * const volatile foo = ...; // Looks nice
int const volatile *const volatile foo = ...; // Looks awkward
在同一个声明中声明多个变量不是一个好习惯,尤其是对于复杂的指针:
int volatile * const foo, const bar; // What?!