सभी अपरकेस में स्थिरांक के नामकरण के लिए इतिहास क्या है?


20

सभी अपरकेस में नामांकित स्थिरांक के सम्मेलन के पीछे का इतिहास क्या है?

मेरा अंतर्ज्ञान यह है कि यह सी प्रीप्रोसेसर के साथ शुरू हुआ, जहां लोगों ने सभी अपरकेस में प्रीप्रोसेसर मैक्रोज़ नाम रखने के लिए एक अभ्यास विकसित किया ताकि वे प्रभावी रूप से एक अलग नामस्थान में रहें और नाम टकराव से बचें। मेरा मानना ​​है कि इस प्रथा को तब गलत समझा गया था और गैर-प्रीप्रोसेसर स्थिरांक ( enums, constचर) पर भी लागू किया गया था ।

सभी अपरकेस में प्रीप्रोसेसर मैक्रोज़ का नामकरण वास्तव में मेरे लिए उपयोगी लगता है। सामान्य स्थिरांक का नामकरण, इस तरह से नहीं (और अगर यह स्थूल नामों के साथ टकराव पैदा करता है तो प्रतिउत्पादक)।

क्या मैं आधार बंद कर रहा हूं? क्या स्थिरांक स्थिरांक का अभ्यास सी पूर्ववर्ती था?


3
मुझे लगता है कि आप यहीं हैं। ऊपरी मामलों में शुरुआती भाषाओं में सब कुछ बहुत अधिक था, निचले मामले का उपयोग बाद में फैशनेबल हो गया। प्रारंभिक सी पुस्तकें आमतौर पर constपहचानकर्ताओं को निचले मामले और #definesऊपरी के रूप में दिखाती हैं । जावा ने हालांकि स्थिरांक और अन्य भाषाओं के लिए ऊपरी मामले को अपनाया, लेकिन मैं उस अंतिम बिट को गलत कर सकता था। अधिक शोध की आवश्यकता है! :)
डेविड अरनो

मैं C या असेम्बलर की प्रकृति के कारण @DavidArno के साथ सहमत हूँ।
स्नूप

जवाबों:


13

सी के लिए, सी प्रोग्रामिंग लैंग्वेज (उर्फ के एंड आर) का पहला संस्करण बताता है कि प्रीप्रोसेसर मैक्रोज़ के बारे में आपका अंतर्ज्ञान सही है:

प्रतीकात्मक निरंतर नाम आमतौर पर ऊपरी मामले में लिखे जाते हैं ताकि उन्हें निचले मामले चर नामों से आसानी से अलग किया जा सके।

कई मायनों में, यह असेंबली लैंग्वेज का एक होल्डओवर था, जहां मैक्रोज़ को लेबर्स, ऑपकोड्स, रजिस्टर नेम और बाकी सभी चीज़ों के साथ अपरकेस में परिभाषित किया गया था। एटी एंड टी-स्टाइल असेंबली का आगमन कुछ प्लेटफार्मों पर बदल गया, लेकिन मुझे लगता है कि यह इस तथ्य से बहुत प्रभावित था कि लोअरकेस का समर्थन करने वाले टर्मिनल एक बात बन रहे थे और यूनिक्स वह था जिसे मैं "लोअरकेस ऑपरेटिंग सिस्टम" कहूंगा।

अन्य दो बिंदुओं पर, आप बल्लेबाजी कर रहे हैं। 500:

enum

जब तक दूसरा संस्करण प्रकाशित हुआ, तब तक enumएस को परिभाषित किया जा चुका था, उन्हें अभिगम स्थिरांक के रूप में संदर्भित किया गया था और स्थिरांक पर अनुभाग में शामिल किया गया था। क्योंकि स्थिरांक द्वारा परिभाषित स्थिरांक enumप्रतीकों द्वारा दर्शाए जाते हैं, जो उन्हें प्रतीकात्मक स्थिरांक बनाता है, जो कि यदि आप अनुशंसित सम्मेलन का पालन करने जा रहे हैं, तो इसका नाम अपरकेस में रखा जाना चाहिए। (प्रीप्रोसेसर मैक्रोज़ की तरह, कुछ भी आपको अन्यथा करने से नहीं रोकता है।)

इसका निहितार्थ यह है कि कुछ भाषाओं के विपरीत, C enumएक प्रथम श्रेणी के प्रकार के रूप में व्यवहार नहीं करता है जहां प्रकार स्वयं भिन्न होते हैं, गणन मान प्रत्येक प्रकार के लिए विशिष्ट होते हैं और दूसरों में पुन: उपयोग किए जा सकते हैं। इसके बजाय, यह प्रभावी रूप से एक सुविधाजनक आशुलिपि है #defineजो पूर्णांक के अनुक्रम को पहचानकर्ताओं के साथ जुड़ा हुआ है। यह बनाता है

enum foo  { BAR, BAZ };
enum quux { BLETCH, BAZ };

अमान्य है क्योंकि सभी प्रतीकों का दायरा साझा है और BAZइसे फिर से परिभाषित किया गया है। (यह प्रीप्रोसेसर पर एक सुधार था, जो उस समय एक #defineक्लोबबेरिंग को दूसरे के बारे में चेतावनी नहीं देता था ।) इसके अलावा, सी को परवाह नहीं है कि क्या आप उन्हें मिलाते हैं क्योंकि वे सभी सिर्फ पूर्णांक हैं,

enum foo  { BAR, BAZ };
enum quux { BLETCH, BLRFL };

enum foo variable = BLETCH;

सभी चेतावनी के साथ एक आधुनिक संकलक पर भी पूरी तरह से वैध।

कॉन्स्ट

NB: constकीवर्ड की उत्पत्ति 1981 में स्ट्रॉस्ट्रुप के सी विद क्लासेस (जो C ++ में विकसित हुई थी) के साथ हुई और अंततः C. द्वारा इसे अपनाया गया। नाम का चुनाव दुर्भाग्यपूर्ण है, क्योंकि यह K & R शब्द के निरंतरता के उपयोग से टकराता है, जिसका अर्थ है कि हम अब कॉल करेंगे शाब्दिक (जैसे 38, 'x'या "squabble")। दूसरे संस्करण में पाठ को फिर से प्रतिबिंबित करने के लिए नहीं लिखा गया था।

घोषित चर constएक अलग कहानी है क्योंकि वे अभी भी चर रहे हैं। उन्हें संशोधित नहीं किया जाना चाहिए, लेकिन क्या एक स्थिर चर की धारणा किसी अन्य चर्चा की तुलना में अधिक समझ में आती है, क्या जंबो चिंराट एक और चर्चा के लिए चारा है। जो भी हो, सी वास्तव में कभी भी इसके बारे में गंभीर नहीं था क्योंकि मानक को केवल यह चाहिए कि कंपाइलर एक निदान का उत्सर्जन करता है जब आप एक को बदलने का प्रयास करते हैं। यदि कोई संशोधन संकलित और निष्पादित किया जाता है, तो वास्तविक व्यवहार अपरिभाषित होता है।

चर होने के नाते, यह समझ में आता है कि कुछ भी constलोअरकेस में नामित होने के सम्मेलन का पालन करेगा। शाब्दिक प्रतिनिधित्व करने के लिए उनका उपयोग करने से कुछ प्रकार के सुरक्षा लाभ होते हैं, लेकिन अच्छे अनुकूलन के लिए नहीं बनता है यदि आपको मूल्य प्राप्त करने के लिए संकलन इकाइयों के बीच पहुंचना है।

वे K & R अर्थों में स्थिरांक नहीं हैं, और इस कारण से उनके पहचानकर्ताओं को अपरकेस नहीं होना चाहिए। कुछ लोग उन्हें इस तरह से उपयोग करते हैं, लेकिन यह कुछ विशिष्ट मामलों को छोड़कर मुझे सलाह नहीं है।


मैं इसे स्वीकार करने जा रहा हूं, और जब मैं उत्तर की सराहना करता हूं, तो enumप्रथम श्रेणी के प्रकारों के बारे में पैराग्राफ और पुनर्वित्त संघर्षों के बारे में प्रासंगिक नहीं लगता है। K & R के पहले संस्करण में "प्रतीकात्मक स्थिरांक" के लिए होने वाले अभ्यास का वर्णन किया गया है। (इसके अलावा, के एंड आर के दूसरे संस्करण की मेरी कॉपी की जांच करने के बाद, मैं देखता हूं कि उनके उदाहरण enumसभी बड़े
अक्षरों
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.