बिंदु के लिए C तारांकन का उपयोग क्यों करता है?
बस - क्योंकि B ने किया।
क्योंकि मेमोरी एक रैखिक सरणी है, इसलिए इस सरणी में एक इंडेक्स के रूप में सेल में मूल्य की व्याख्या करना संभव है, और बीसीपीएल इस उद्देश्य के लिए एक ऑपरेटर की आपूर्ति करता है। मूल भाषा में यह वर्तनी थी rv
, और बाद में !
, जबकि बी का उपयोग करता है *
। इस प्रकार, यदि p
एक सेल एक अन्य सेल के (या पते के), या सूचक के सूचकांक से युक्त है *p
, तो पॉइंट-इन सेल की सामग्री को संदर्भित करता है, या तो एक अभिव्यक्ति में या एक असाइनमेंट के लक्ष्य के रूप में।
से सी भाषा का विकास
बस। इस बिंदु पर, यह सवाल उतना ही निराला है कि "अजगर 3 .
पद्धति का उपयोग करने के लिए क्यों कहता है? क्यों नहीं ->
?" खैर ... क्योंकि पायथन 2 .
एक विधि को कॉल करने के लिए उपयोग करता है।
शायद ही कभी किसी भाषा का अस्तित्व होता है। इसका प्रभाव है और यह उस चीज पर आधारित है जो पहले आई थी।
तो, बी !
ने अपने पूर्ववर्ती बीसीपीएल की तरह एक सूचक को डीफ़्रॉन्डिंग करने के लिए उपयोग क्यों नहीं किया?
खैर, बीसीपीएल थोड़ा चिंतित था। के बजाय &&
या ||
BCPL का इस्तेमाल किया logand
और logor
। ऐसा इसलिए था क्योंकि अधिकांश कीबोर्ड में चाबियाँ ∧
या ∨
चाबियां नहीं थीं और न के बराबर वास्तव में शब्द था NEQV
(देखें बीसीपीएल संदर्भ मैनुअल )।
प्रतीत होता है कि इन सभी तार्किक ऑपरेटरों के लिए लंबे शब्दों के बजाय सिंटैक्स को कसने के लिए आंशिक रूप से प्रेरित किया गया है जो प्रोग्रामर ने अक्सर किया। और इस तरह !
से डीरेफेरेंस हो गया *
ताकि !
लॉजिकल निगेटिव इस्तेमाल किया जा सके। ध्यान दें कि अपर *
ऑपरेटर और बाइनरी *
ऑपरेटर (गुणन) के बीच अंतर है ।
खैर, अन्य विकल्पों के बारे में क्या पसंद है ->
?
->
क्षेत्र derefrences आसपास वाक्यात्मक चीनी के लिए ले जाया गया struct_pointer->field
है जो(*struct_pointer).field
अन्य विकल्प जैसे <-
अस्पष्ट पार्सिंग बना सकते हैं। उदाहरण के लिए:
foo <- bar
क्या यह इस प्रकार है:
(foo) <- (bar)
या
(foo) < (-bar)
एक यूनीरी ऑपरेटर बनाना जो एक बाइनरी ऑपरेटर से बना होता है और दूसरा यूनिरी ऑपरेटर को समस्याएँ होने की संभावना होती है क्योंकि दूसरा यूनिरी ऑपरेटर किसी अन्य अभिव्यक्ति के लिए उपसर्ग हो सकता है।
इसके अलावा, चीजों को एक न्यूनतम तक बार-बार टाइप करने की कोशिश करना फिर से महत्वपूर्ण है। मैं होता नफरत लिखने के लिए:
int main(int argc, char->-> argv, char->-> envp)
यह भी पढ़ना मुश्किल हो जाता है।
अन्य वर्ण संभव हो सकते हैं ( @
जब तक इसका उपयोग उद्देश्य C ने इसे लागू नहीं किया था )। हालांकि फिर से, यह 'C उपयोगों के मूल में जाता है *
क्योंकि B ने किया था'। B ने उपयोग क्यों नहीं किया @
? खैर, बी सभी पात्रों का उपयोग नहीं किया। कोई bpp
प्रोग्राम नहीं था ( cpp की तुलना करें ) और अन्य वर्ण B में उपलब्ध थे (जैसे कि #
बाद में cpp द्वारा उपयोग किया गया था)।
अगर मैं अनुमान लगा सकता हूं कि क्यों - इसकी वजह से जहां चाबियाँ हैं। बी पर एक मैनुअल से :
जब यह उचित लगता है, तो पते में हेरफेर की सुविधा के लिए, बी दो अपरिपक्व पते ऑपरेटर प्रदान करता है, *
और &
। &
एड्रेस ऑपरेटर है, इसलिए &x
इसका पता x
एक है। *
अप्रत्यक्ष परिचालक है; *x
इसका मतलब है "एक पते के रूप में एक्स की सामग्री का उपयोग करें।"
ध्यान दें कि &
शिफ्ट -7 है और *
शिफ्ट-8 है। एक-दूसरे के साथ उनकी निकटता प्रोग्रामर के लिए एक संकेत हो सकता है कि वे क्या करते हैं ... लेकिन यह केवल एक अनुमान है। किसी को केन थॉम्पसन के बारे में पूछना होगा कि वह चुनाव क्यों किया गया था।
इसलिए यह अब आपके पास है। C वह तरीका है क्योंकि B था। बी वह तरीका है क्योंकि यह बीसीपीएल से कैसे बदलना चाहता था।
->
सी भाषा में एक परिचालक ऑपरेटर के रूप में उपयोग किया जा रहा है - जब किसी संरचना में फ़ील्ड्स तक पहुँचने के लिए:struct_pointer->field
जो कि कम है(*struct_pointer).field
।