簡體   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