c - C中箭头运算符之间的空间

标签 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->stuff 干净多了。

最佳答案

从句法的角度来看这无关紧要,它是微不足道的空格。

我会说(有趣的是)没有空格的样式更为常见。我觉得它很好,因为它以某种方式反射(reflect)了结构包容的“紧密性”。当然,我写的几乎所有其他二元运算符 都带有 空格,即

a->b = 1 + 2;

永远不会

a -> b = 1+2;

a->b = 1+2;

说到底,这只是个人喜好。当然,在许多专业环境中,“项目/公司风格指南规定这是如何完成的,在这里”。

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

a.b = 1 + 2;

永远不会:

a . b = 1+2;

我认为前一种格式对我有用,因为正如我在上面所说的那样,运算符两侧的两件事是同一件事的一部分,“a.b”是一个术语,而不是二。使用 +,它的两个操作数是独立的,因此间距对我来说更有意义。

关于c - C中箭头运算符之间的空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16012721/

相关文章:

c - 没有 malloc AVR 的共享指针

c - 如何使用 C 语言的模块化方法将指针传递给每个函数

c++ - 函数成员声明中各部分的名称

c++ - C++会先转换成汇编吗

standards - ECMA-119 规范中提到的 ISO 2375 和 2735 标准是什么?

c - 紧接在函数名/参数之后但在方括号之前声明的结构。有人可以解释这个 C 语法吗?

c - 父进程不等待子进程 - C

c - 分配给类型 'struct compartido' 时不兼容的类型

c - 如何评估 c 中的结构并通过指针变量给出输入?

c++ - 使用绑定(bind)方法的程序已构建但无法启动