我有一位同事在C(语法#1)中检查这样的代码:
(*(*(*p_member).p_member).p_member).member
当我问他为什么不使用时 - > (语法#2):
p_member->p_member->p_member->member
他得到了真正的防御性说明语法#2比#1更复杂......我最终改变了他的代码,因为我不得不修改它并且无法读取它,然后他生气了我实际上触及了它。 ..
SO社区更喜欢哪种语法?两者都有效,但我发现语法#2更具可读性。
由于问题具有主观性,我将此设置为社区维基。
答案 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.
话虽如此,不要通过改变他们的代码来冒犯别人,特别是如果它是一种风格问题。这不值得。