在C(或C ++)中取消引用指针的语法

时间:2009-04-28 15:45:13

标签: c++ c syntax pointers

我有一位同事在C(语法#1)中检查这样的代码:

(*(*(*p_member).p_member).p_member).member

当我问他为什么不使用时 - > (语法#2):

p_member->p_member->p_member->member

他得到了真正的防御性说明语法#2比#1更复杂......我最终改变了他的代码,因为我不得不修改它并且无法读取它,然后他生气了我实际上触及了它。 ..

SO社区更喜欢哪种语法?两者都有效,但我发现语法#2更具可读性。

由于问题具有主观性,我将此设置为社区维基。

11 个答案:

答案 0 :(得分:22)

语法#1的技术术语是“坚果”。

那就是说,我会担心代码必须间接3次。

答案 1 :(得分:16)

我认为你的同事要么缺乏经验,要么是某种新的,或者只是简单无知。你会发现一致的选择是使用 - >句法。

答案 2 :(得分:11)

在C ++中,我肯定会使用 - >,因为 - >可以超载。

在C中,我会使用 - >同时也因为它更容易阅读,更快速的输入和更少的错误(希望你的同事不会迷失在括号中!)。

答案 3 :(得分:8)

我在这里打字袖口,但我的回忆是,在K& R第1版中解释了C中->运算符存在的逻辑(释义):否则由于(*p).a*运算符的必要优先级,您必须输入.

不要将->用于其预期用途是坚定的。

答案 4 :(得分:6)

我会带走门#2,蒙蒂!当然它更难以打字,但它比找出哪个操作符取消引用哪个指针更清晰。

答案 5 :(得分:5)

您可能还希望在您的团队中讨论“代码所有权”的概念。你的同事并不“拥有”代码,公司也是如此。因此,公司雇用的任何人都有充分理由可以编辑它。

答案 6 :(得分:1)

主观啊?

我也会拿#2!

答案 7 :(得分:1)

第二种变体显然看起来更清晰。偏好#1的唯一理由是一些奇怪的运算符*和运算符 - >当#1与#2的效果真的不同时,重载。

答案 8 :(得分:1)

坏同事。改变同事。

答案 9 :(得分:0)

我有过“ - >”的经历在几个编译器中没有正确实现...所以当你有多个嵌套级别时,正常(* p).a更有可能工作。

答案 10 :(得分:-1)

否2.

话虽如此,不要通过改变他们的代码来冒犯别人,特别是如果它是一种风格问题。这不值得。