c中指针箭头之间的空格

时间:2013-04-15 10:17:16

标签: c pointers standards arrows

前几天我收到通知,我不应该在c中以某种方式使用指针箭头。我做的是这个:

struct info {
    int x;
    char *data;
}

int main() {
    struct info *information;
    information -> x = 0; /*Notice the spacing here between information and -> x*/
    information -> data = "";
}

我经常看到的

struct info *information;
information->x = 0;

我只是想问一下,这只是一个常规的编码标准吗? 我觉得 - >比p->东西更清洁。

3 个答案:

答案 0 :(得分:10)

从句法的角度来看,它无关紧要,它是无关紧要的空白。

我会说(在某种程度上)没有空格的风格更为常见。我发现它很好,因为它以某种方式反映了结构遏制的“紧密性”。当然,我用空格写了几乎所有其他二元运算符,即

a->b = 1 + 2;

永远不会

a -> b = 1+2;

a->b = 1+2;

最后,这只是个人偏好。当然,在许多专业环境中被提升为“项目/公司风格指南决定了这是如何完成的,在这里”。

此外,当使用.运算符直接处理结构时,我使用相同的方法。总是:

a.b = 1 + 2;

永远不会:

a . b = 1+2;

我认为以前的格式化对我来说很有用,因为正如我上面所说的那样,运算符两边的两个东西是同一个东西的一部分,“a.b”是一个术语,而不是两个。对于+,它的两个操作数是独立的,因此间距对我来说更有意义。

答案 1 :(得分:5)

C是一种非常自由形式的语言,解析器会忽略空格(制表符,空格,换行符等)。

information -> x = 0;

相同
information->x=0;

information
->
x
=
0
;

答案 2 :(得分:1)

这是一个品味问题,因此可能更适合https://softwareengineering.stackexchange.com/

一般来说,我认为标准是没有空间。在我的C代码中,我将算术运算符编写为x + y等,将成员访问运算符编写为a->y等。这是因为成员及其所有者可以是“一个单位”,而算术是对多个不同值的操作,其唯一关系是它们碰巧在表达式中一起使用。另一方面,成员或从根本上与其所有者联系在一起,缺乏空间意味着这一点。

使用你喜欢的任何一个 - 它没有太大的区别。不过,如果你想更频繁地知道使用的是什么,那就是无空间版本。