C11 में कुरूप खोजशब्द क्यों?


15

मैं वर्तमान में C11 विनिर्देश के मसौदे को पढ़ रहा हूं । नए शुरू किए गए कीवर्ड: _Bool, _Alignof, _Atomicसभी मानक एक्सटेंशन के बजाय कस्टम एक्सटेंशन की तरह महसूस करते हैं struct, union, int

मुझे एहसास हुआ कि मानक मूल रूप से मानकीकृत एक्सटेंशन के होते हैं ... लेकिन फिर भी, यह भयानक है! शायद हम जल्द ही __Long_Long_Reallylong_Integer_MSVC_2020_tमानक में रेंगते हुए समाप्त हो जाएंगे !

क्या गैरमानक कोड की पिछड़ी संगतता कीवर्ड की नई शैली का एकमात्र कारण है?


2
नहीं, मैं वास्तव में उस तरह के लंबे प्रकार के बारे में चिंता नहीं करेगा। _, Az, AZ, और 0-9 के अक्षर और संख्या संयोजनों की संख्या का अर्थ है कि वे शायद इसके बजाय केवल छोटा और कठिन याद रखें।
नील

2
प्रत्येक कीवर्ड के लिए समानार्थी शब्द का पर्यायवाची अक्सर प्रासंगिक मानक पुस्तकालय हेडर फ़ाइल में परिभाषित किया जाता है। उदाहरण के लिए, किसी भी C11 कार्यान्वयन की <stdbool.h>हेडर फ़ाइल में प्रीप्रोसेसर मैक्रो जैसे कि शामिल होना चाहिए #define bool _Bool। यह एक साफ समाधान है क्योंकि यह पीछे की संगतता को बनाए रखता है, लेकिन किसी भी नए कोड की अनुमति देता है, जिसमें अधिक शीर्ष वाक्यविन्यास का उपयोग करने के लिए नई हेडर फ़ाइल शामिल है।
andrew.punnett

जवाबों:


20

मुझे लगता है कि पूरी तरह से मानक कोड के साथ पीछे की संगतता अधिक महत्वपूर्ण कारण है।

यदि आप एक ऐसा कीवर्ड जोड़ते हैं, जिसका उपयोग पिछले कोड में एक वैध पहचानकर्ता के रूप में किया जा सकता है, तो आप संभावित सूक्ष्म त्रुटियों, विशेष रूप से सी में, किसी भी तरह से जटिल पार्सिंग नियमों के साथ एक भाषा का दर्द पैदा करते हैं।

यदि इन पहचानकर्ताओं को कहीं सार्वजनिक इंटरफ़ेस के रूप में उपयोग किया गया था, तो आप ऐसे दुर्भाग्यपूर्ण पुस्तकालयों के सभी उपयोगकर्ताओं को दर्द जोड़ते हैं, जो शायद सी का उपयोग नहीं करते हैं, लेकिन रूबी, या पायथन, आदि से पुस्तकालय को कॉल करते हैं।

यही कारण है कि नए कीवर्ड कम शब्दों की तरह दिखने के लिए बाध्य हैं और बोल्ट-ऑन हैक की तरह अधिक हैं जो लोगों के पास पहले से ही किसी अन्य उद्देश्य के लिए उपयोग करने की संभावना कम है।


यह ध्यान दिया जाना चाहिए कि यह प्रश्न C C C ++ के संबंध में था न कि यह मायने रखता है। आपके उत्तर में इस कारण को शामिल किया गया है कि Boolविरासत में दिए गए एक कस्टम प्रकार के साथ संघर्ष का उपयोग करने से बचने के लिए एक नए सुपरप्रोक्टेड प्रकार का नाम दिया जाएगा, जिसे बूलियन होने के लिए व्यापक रूप से स्वीकार किया गया था, लेकिन वास्तव में सी मानक का हिस्सा नहीं था, इसलिए यह धारणा सुरक्षित नहीं है। बनाना।
रामहाउंड

1
@ रामहाउंड, IMHO boolसी। की भावना में अधिक होगा। इसके अलावा, मैं इस जवाब से पूरी तरह आश्वस्त नहीं हूं, क्योंकि बदसूरत शब्दों का उपयोग गैर-मानक कोड द्वारा भी किया जा सकता है। और शब्दों की शैली को बदलने से मानक शब्दों को एक नज़र में पहचानना कठिन हो जाता है।
वोरैक

6
@ वोरैक: समस्या यह है कि यदि boolभाषा में बिना शर्त जोड़ा गया है, तो उन सभी परियोजनाओं का अपना (पूरी तरह से वैध) संस्करण boolसंकलन बंद हो जाएगा। यह भाषा संशोधन की स्वीकृति को गंभीर रूप से नुकसान पहुंचाएगा। यही कारण है कि सभी नए पहचानकर्ताओं को आरक्षित सेट (इस प्रकार शुरुआत _[capital]) से लिया जा रहा है । चूंकि इसमें खुद की भी बड़ी मांग boolथी, इसलिए इसे जोड़ा गया typedef _Bool boolहै <stdbool.h>
बार्ट वैन इनगेन शेनॉ

1
@BartvanIngenSchenau - जो लोगों को एक बूलियन मान के अपने टाइप किए गए स्थान को अपने भीतर समाहित करने की अनुमति देता है stdbool.hया अपनी विरासत कोड का समर्थन करने के लिए नए प्रकार के लिए अपने स्वयं के टाइफेड को अद्यतन करने की अनुमति देता है ।
रामहाउंड

1
@ रामहाउंड - नए C11 कीवर्ड के साथ विवादित चर वाले लोग "तो इसका उपयोग नहीं कर सकते?"। नए भाषा मानकों के साथ किसी भी टकराव को रोकने के लिए एक संकलन ध्वज std = xxx है।
स्कूटर

8

अंडरस्कोर और एक कैपिटल लेटर (और डबल अंडरस्कोर के साथ कुछ भी) के साथ शुरू होने वाले नाम पिछले मानकों में कंपाइलर / मानक पुस्तकालय कार्यान्वयन के लिए आरक्षित थे।

से सुरक्षित पहचानकर्ता C89 और C99 की:

कार्यान्वयनकर्ता के लिए भी आरक्षित सभी बाहरी पहचानकर्ता एक अंडरस्कोर के साथ शुरू होते हैं, और अन्य सभी पहचानकर्ता एक अंडरस्कोर के साथ शुरू होते हैं जिसके बाद एक कैपिटल लेटर या एक अंडरस्कोर होता है।

इसलिए सिद्धांत रूप में, उन नए खोजशब्दों को पहले किसी भी कोड रिटेन में उपयोग नहीं किया जाना चाहिए और इससे किसी भी सरल नाम की तुलना में बेहतर पश्चगामी संगतता हो सकती है, जो कि एकमात्र कारण है।


4
आपको उपयुक्त मानकों के अनुभाग का हवाला देना चाहिए या संभवत: लिंक करना चाहिए, ताकि अन्य आपके बयान को जल्दी से सत्यापित कर सकें। इससे आपका उत्तर बेहतर होगा।
स्पेसट्रैक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.