[英]C and pointer notation
打开Postgres代码库,我看到很多C代码是通过使用 - >表示法指针编写的,其方式如下:
(foo)->next = 5;
我知道指针符号具有优先级,例如 - > =(* foo)。 并且与* foo不同。
但是,当括号在变量名之外并且取消引用next的地址或者它只是编码风格特有的约定时,它是否意味着什么?
它是我以前从未见过的编码约定。
但它没有改变任何东西。
(foo)->next = 5;
完全等同于
foo->next = 5;
它是安全的编码惯例。
在简单的代码中,foo只是一个指针,parens是多余的。
(foo)->next = 5;
然而,考虑是否有或者是 ,FOO可能是由宏观所以它是一个更复杂的表达式定义的机会。
在这种情况下,可能需要使用parens来避免编译器错误,或者更糟糕的是避免错误的优先级。 想象一下,如果它转化为丑陋的表达,如:
( ++get_foo() )->next = 5;
或共同演员:
( (db_record*)foo_ptr )->next = 5;
习惯性的 C代码需要注意的是,宏通常被用作我们可能在其他语言中更明确地做的事情的抽象机制;-)
这毫无意义。 括号内没有效果,因为它们内部的表达式非常简单。 基本上就是这样
(*(foo)).next = 5;
正如您所看到的,这是一组无关的括号。 如果这就是项目的运作方式,那么就去做吧。 否则,我认为它看起来很糟糕,所以我会尽量不使用它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.