打开Postgres代码库,我看到很多C代码都是通过指向 - >来编写的。以这样的方式表示:
(foo)->next = 5;
我知道指针符号具有优先级,例如 - > =(* foo)。并且与* foo不同。
但是,当括号在变量名之外并且取消引用next的地址或者它只是一种编码风格特有的约定时,它是否意味着什么?
答案 0 :(得分:6)
这是我以前从未见过的编码约定。
但它没有改变任何东西。
(foo)->next = 5;
完全等同于
foo->next = 5;
答案 1 :(得分:2)
这是安全的编码惯例。
在简单的代码中,foo只是一个指针,parens是多余的。
(foo)->next = 5;
但是,请考虑是否存在 是否可能由宏定义foo,因此它是一个更复杂的表达式。
在这种情况下,可能需要parens来避免编译器错误,或者更糟糕的是避免错误的优先级。想象一下,如果它转化为丑陋的表达,如:
( ++get_foo() )->next = 5;
或普通演员:
( (db_record*)foo_ptr )->next = 5;
惯用 C代码需要注意的是,宏通常被用作我们可能在其他语言中更明确地做的事情的抽象机制; - )
答案 2 :(得分:1)
没有意义。括号内没有效果,因为它们内部的表达式非常简单。这基本上是
(*(foo)).next = 5;
正如您所看到的,这是一组无关的括号。如果这就是项目的运作方式,那么就去做吧。否则,我觉得它看起来很糟糕,所以我会尽量不使用它。