繁体   English   中英

C和指针表示法

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM