2009-04-28 13 views
10

मैं सी में इस तरह कोड में एक सहयोगी की जांच के लिए किया था (सिंटेक्स # 1):सिंटेक्स सी (या सी ++) में एक सूचक dereferencing के लिए

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

जब मैंने उससे पूछा कि क्यों वह का उपयोग नहीं किया -> (सिंटेक्स # 2):

p_member->p_member->p_member->member 

वह वास्तव में बचाव की मुद्रा में कहा है कि वाक्य रचना # 2 # 1 की तुलना में अधिक जटिल है मिल गया ... मैं अपने कोड को बदलने क्योंकि मैं इसे संशोधित करने के लिए किया था और इसे पढ़ा नहीं कर सकता है समाप्त हो गया, तो वह पागल हो गया कि मैंने वास्तव में इसे छुआ ...

कौन सा वाक्यविन्यास एसओ समुदाय पसंद करता है? दोनों मान्य हैं, लेकिन मुझे वाक्यविन्यास # 2 और अधिक पठनीय लगता है।

मैं इसे व्यक्तिपरक विकी में स्थापित कर रहा हूं क्योंकि सवाल व्यक्तिपरक है।

+3

क्या आप * की प्राथमिकता को भ्रमित कर रहे हैं। अपने पहले स्निपेट में? –

+0

# 2 में, अंतिम तत्व, सदस्य को भी -> – Trent

+1

का उपयोग करके एक्सेस किया जाना चाहिए, मैं इस व्यक्तिपरक पर भी विचार नहीं करता हूं। तीन ऑपरेटरों (()) और एक सहित, की पसंद को देखते हुए, आप अनुमान लगा सकते हैं कि मैं क्या चुनूं। – ojrac

उत्तर

22

वाक्यविन्यास # 1 के लिए तकनीकी शब्द "पागल" है।

उसने कहा, मुझे कोड के बारे में थोड़ा चिंता होगी जिसे अप्रत्यक्ष 3 बार भी जाना है।

+0

हेहेह ... संकेतक सी – paquetp

+0

में प्रतिनिधित्व किए गए डोमेन मॉडल के कारण था, यदि आपको इसे अधिक से अधिक करने की आवश्यकता है तो temp सूचक का उपयोग करने के बारे में सोचें: thingie_s * tp; ... tp = p_member-> p_member-> p_member; फिर टीपी के माध्यम से एक बार अप्रत्यक्ष जाओ। –

+0

ओह हाँ, निश्चित रूप से, निश्चित रूप से ... विशेष रूप से यदि आप इसे एक से अधिक बार कर रहे हैं। – paquetp

6

मैं दरवाजा # 2, मोंटी ले जाऊंगा! निश्चित रूप से टाइप करना अधिक कठिन है, लेकिन यह पता लगाने से अधिक स्पष्ट है कि कौन से ऑपरेटरों को पॉइंटर का बहिष्कार होता है।

+0

एफवाईआई - मॉन्टी = मॉन्टी हॉल "लेट्स मेक ए डील" प्रसिद्धि –

+0

मुझे उम्मीद है कि यह एक मजाक है। –

11

सी ++ में मैं निश्चित रूप से ->, क्योंकि -> ओवरलोड किया जा सकता है।

सी में मैं उपयोग करता हूं -> साथ ही साथ क्योंकि इसे पढ़ने में आसान, तेज़ी से टाइप करने और कम त्रुटि प्रवण (उम्मीद है कि आपके सहयोगी कोष्ठक में खोना नहीं है!)।

+4

मुझे लगता है कि ओवरलोडिंग यहां एक लाल हेरिंग है। एक पुनरावर्तक पी-> ए या (* पी)। ए के साथ काम करेगा। उपयोग करें -> क्योंकि इसे पढ़ने में बहुत आसान और बहुत कम त्रुटि-प्रवण है। याद रखें कि * (पीए) और (* पी) .a दो अलग-अलग चीजें हैं, इसलिए आपको (* पी) .a का उपयोग करना याद रखना होगा, लेकिन पी-> एक अच्छा और सरल है। –

+2

सिद्धांत ऑपरेटर *() और ऑपरेटर ->() को जंगली रूप से अलग-अलग चीजों को करने के लिए अधिभारित किया जा सकता है ... उम्मीद है कि, हालांकि नहीं। – ephemient

+0

-> अक्सर स्मार्ट पॉइंटर्स –

1

व्यक्तिपरक हुह?

मैं # 2 भी ले जाऊंगा!

1

दूसरा संस्करण स्पष्ट रूप से स्पष्ट दिखता है। # 1 को प्राथमिकता देने का एकमात्र कारण कुछ अजीब ऑपरेटर * और ऑपरेटर का मामला है -> ओवरलोडिंग # 1 के बाद # 2 से वास्तव में अलग प्रभाव पड़ता है।

+9

और यदि ऑपरेटरों को अधिभारित किया गया है कि उनके पास "वास्तव में अलग" प्रभाव हैं, तो उस कोड के लेखक को वापस खींचकर गोली मार दी जानी चाहिए। – rmeador

+0

इन ऑपरेटरों को अधिभारित करने वाले किसी भी प्रोजेक्ट के कोडिंग मानकों में प्रतिबंधित किया जाएगा। –

-1

नहीं 2.

कहा करने के बाद कि, उनके कोड को बदलने, खासकर अगर यह शैली की बात है के द्वारा लोगों का अपमान नहीं है। यह सिर्फ इसके लायक नहीं है।

+2

यदि मुझे यह पता लगाना है कि कोड की एक पंक्ति क्या कहती है, इसे पढ़ने और आगे बढ़ने के बजाय, यह एक गुणवत्ता की समस्या है। मैं इसे दिल की धड़कन में बदल दूंगा। –

+3

तो आप अन्य लोगों के साथ कैसे काम कर सकते हैं जिनके पास अलग-अलग विचार हैं जो पठनीय है और क्या नहीं? मैं 40 अन्य (और स्मार्ट!) डेवलपर्स के साथ काम करता हूं और बहुत से लोगों के पास उनका विचार है कि कोड को स्वरूपित किया जाना चाहिए और क्या पठनीय है। अगर हम इस तरह के एक दूसरे पर कदम उठा रहे थे, तो साथ मिलकर काम करना नरक होगा और हम कभी भी कुछ हासिल नहीं करेंगे। –

+2

मुझे लगता है कि कोडिंग मानकों पर सहमति होनी होगी। एक लाख अलग कोडिंग शैलियों के साथ कोड बेस रखने के लिए यह सब एक दुःस्वप्न है। – jdizzle

5

आप अपनी टीम में "कोड स्वामित्व" की धारणा पर भी चर्चा करना चाहेंगे। आप सहयोगी कोड "मालिक" नहीं है, कंपनी करता है। इसलिए कंपनी द्वारा नियोजित कोई भी, अच्छे कारण से, इसे संपादित कर सकता है।

+3

यहां सवाल यह नहीं है कि कानूनी रूप से कोड का मालिक कौन है, लेकिन कोडेबेस के किसी विशेष भाग को बनाए रखने और डीबग करने की आवश्यकता है। यदि यह सहकर्मी है, तो मैं कहता हूं कि कोड को जिस तरह से पसंद है उसे देखना चाहिए, भले ही हम में से अधिकांश दूसरे तरीके को पसंद करते हैं। –

+0

यदि कोई इसे पढ़ रहा है तो बाकी की कहानी चाहता है - उसने कोड शुरू किया, मुझे इसे "एकीकृत" करना था (इसे स्रोत नियंत्रण में जोड़ना, उचित प्रक्रिया में रखना, उस प्रक्रिया को उसके कार्य को कॉल करना है) ... यह नहीं हुआ काम नहीं करते, इसलिए मुझे इसे खत्म करना पड़ा। – paquetp

+0

मेरी पुस्तक में, यदि यह काम नहीं करता है, तो वह आपको बदलने के बारे में शिकायत नहीं करता है। बेशक, यह देखते हुए कि वह (* पी) पसंद करता है। पर निर्माण ->, मुझे आश्चर्य नहीं हुआ कि यह काम नहीं करता है। –

16

मुझे लगता है कि आपका सहकर्मी या तो अनुभवहीन है, कुछ प्रकार का निओफोब, या सिर्फ सादा ओल 'अनजान है। आपको यह पता चल जाएगा कि सर्वसम्मति से चयन -> वाक्यविन्यास का उपयोग करना है।

+0

यही वही है जो मैं उम्मीद करता हूं ... – paquetp

8

मैं यहाँ कफ बंद टाइप कर रहा हूँ, लेकिन मेरी याद है कि सी में -> ऑपरेटर के अस्तित्व के लिए तर्क के रूप में कश्मीर & आर के 1 संस्करण में विस्तार से बताया गया है (टीका): क्योंकि अन्यथा आप चाहते * और . ऑपरेटरों की आवश्यक प्राथमिकता के कारण (*p).a टाइप करना होगा।

अपने उद्देश्य के उद्देश्य के लिए -> का उपयोग न करने के लिए पागल है।

1

खराब सहयोगी। सहकर्मी बदलें।

0

मुझे अनुभव हुए हैं जहां "->" कुछ कंप्यूटर्स में ठीक से लागू नहीं किया गया था ...इसलिए जब आपके पास घोंसले के कई स्तर होते हैं तो सामान्य (* पी) .a काम करने की अधिक संभावना होती है।

संबंधित मुद्दे