繁体   English   中英

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

[英]Syntax for dereferencing a pointer in C (or C++)

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

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

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

p_member->p_member->p_member->member

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

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

由于问题是主观的,我将此设置为社区维基。

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

也就是说,我担心一些代码必须间接3次。

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

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

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

我在这里打字袖口,但我的回忆是,在K&R的第一版中解释了C中->运算符存在的逻辑(释义):因为否则你必须键入(*p).a由于*.的必要优先权. 运营商。

不使用->为其预期目的是坚果。

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

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

主观啊?

我也会拿#2!

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

坏同事。 改变同事。

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

没有2。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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