नियम (जो C ++ 11 में नहीं बदले गए):
- कार्यान्वयन मैक्रो के रूप में उपयोग के लिए सहित किसी भी दायरे में आरक्षित :
- एक अपरकेस के साथ शुरुआत करने वाले पहचानकर्ता तुरंत एक बड़े अक्षर के बाद आते हैं
- समीपवर्ती अंडरस्कोर (या "डबल अंडरस्कोर") वाले पहचानकर्ता
- वैश्विक नाम स्थान में आरक्षित:
- एक अंडरस्कोर के साथ शुरुआत करने वाले पहचानकर्ता
- इसके अलावा,
std
नाम स्थान में सब कुछ आरक्षित है। (आपको टेम्पलेट विशेषज्ञताओं को जोड़ने की अनुमति है, हालांकि)
2003 C ++ मानक से:
17.4.3.1.2 वैश्विक नाम [lib.global.names]
नाम और फ़ंक्शन हस्ताक्षरों के कुछ सेट हमेशा कार्यान्वयन के लिए आरक्षित होते हैं:
- प्रत्येक नाम जिसमें एक डबल अंडरस्कोर (
__
) है या एक अपरकेस अक्षर के साथ शुरू होता है (2.11) किसी भी उपयोग के लिए कार्यान्वयन के लिए आरक्षित है।
- अंडरस्कोर से शुरू होने वाला प्रत्येक नाम वैश्विक नामस्थान में एक नाम के रूप में उपयोग के लिए कार्यान्वयन के लिए आरक्षित है। 165
165) ऐसे नाम नेमस्पेस ::std
(17.4.3.1) में भी आरक्षित हैं ।
क्योंकि C ++ C मानक (1.1 / 2, C ++ 03) पर आधारित है और C99 एक मानक संदर्भ है (1.2 / 1, C ++ 03) ये भी लागू होते हैं, 1999 C मानक से:
7.1.3 आरक्षित पहचानकर्ता
प्रत्येक हेडर अपने संबंधित उप-वर्ग में सूचीबद्ध सभी पहचानकर्ताओं को घोषित करता है या परिभाषित करता है, और अपने संबंधित भविष्य के पुस्तकालय निर्देशों के उप-सूचियों और पहचानकर्ताओं में सूचीबद्ध पहचानकर्ताओं को वैकल्पिक रूप से घोषित या परिभाषित करता है जो हमेशा किसी भी उपयोग के लिए या फ़ाइल गुंजाइश पहचानकर्ता के रूप में उपयोग के लिए आरक्षित होते हैं।
- सभी पहचानकर्ता जो एक अंडरस्कोर के साथ शुरू होते हैं और या तो एक बड़े अक्षर या किसी अन्य अंडरस्कोर हमेशा किसी भी उपयोग के लिए आरक्षित होते हैं।
- सभी पहचानकर्ता जो एक अंडरस्कोर से शुरू होते हैं, हमेशा साधारण और टैग नाम स्थान दोनों में फ़ाइल स्कोप वाले पहचानकर्ताओं के रूप में उपयोग के लिए आरक्षित होते हैं।
- निम्न उपवर्गों में से प्रत्येक में एक स्थूल नाम (भविष्य की लाइब्रेरी दिशाओं सहित) निर्दिष्ट के रूप में उपयोग के लिए आरक्षित है यदि इसके किसी भी संबंधित हेडर को शामिल किया गया है; जब तक स्पष्ट रूप से अन्यथा न कहा जाए (देखें 7.1.4)।
- निम्नलिखित उपवर्गों में से किसी में बाहरी लिंकेज वाले सभी पहचानकर्ता (भविष्य की लाइब्रेरी दिशाओं सहित) हमेशा बाहरी लिंकेज वाले पहचानकर्ताओं के रूप में उपयोग के लिए आरक्षित होते हैं। 154
- निम्न उपवर्गों में से किसी में सूचीबद्ध फ़ाइल स्कोप वाले प्रत्येक पहचानकर्ता (भविष्य की लाइब्रेरी दिशाओं सहित) को मैक्रो नाम के रूप में उपयोग करने के लिए आरक्षित किया गया है और यदि किसी भी संबंधित हेडर को शामिल किया गया है तो उसी नाम स्पेस में फ़ाइल स्कोप के साथ एक पहचानकर्ता के रूप में।
कोई अन्य पहचानकर्ता आरक्षित नहीं है। यदि कार्यक्रम एक ऐसे संदर्भ में पहचानकर्ता की घोषणा या परिभाषित करता है जिसमें यह आरक्षित है (7.1.4 द्वारा अनुमत के अलावा), या एक स्थूल नाम के रूप में आरक्षित पहचानकर्ता को परिभाषित करता है, तो व्यवहार अपरिभाषित है।
यदि प्रोग्राम #undef
ऊपर सूचीबद्ध पहले समूह में एक पहचानकर्ता की किसी भी स्थूल परिभाषा को हटा देता है (के साथ ), व्यवहार अपरिभाषित है।
154) बाहरी लिंकेज के साथ सुरक्षित पहचानकर्ता के सूची में शामिल हैं errno
, math_errhandling
, setjmp
, और va_end
।
अन्य प्रतिबंध लागू हो सकते हैं। उदाहरण के लिए, POSIX मानक में बहुत सारे पहचानकर्ता होते हैं जो सामान्य कोड में दिखाई देते हैं:
- एक पूंजी के साथ शुरू होने वाले नामों
E
ने एक अंक या बड़े अक्षर का अनुसरण किया:
- अतिरिक्त त्रुटि कोड नामों के लिए उपयोग किया जा सकता है।
- नाम जो
is
या तो to
लोअरकेस अक्षर से शुरू होते हैं
- अतिरिक्त चरित्र परीक्षण और रूपांतरण कार्यों के लिए उपयोग किया जा सकता है।
- नाम जो
LC_
एक बड़े अक्षर से
शुरू होते हैं
- स्थानीय विशेषताओं को निर्दिष्ट करने वाले अतिरिक्त मैक्रो के लिए उपयोग किया जा सकता है।
- सभी मौजूदा गणित कार्यों के नाम के साथ प्रत्यय
f
या l
आरक्षित हैं
- इसी कार्यों के लिए जो क्रमशः फ्लोट और लंबे डबल तर्कों पर काम करते हैं।
SIG
एक बड़े अक्षर के बाद शुरू होने वाले नाम आरक्षित हैं
- अतिरिक्त संकेत नामों के लिए।
SIG_
एक बड़े अक्षर के बाद शुरू होने वाले नाम आरक्षित हैं
- अतिरिक्त सिग्नल कार्यों के लिए।
- के साथ शुरुआत नाम
str
, mem
या wcs
एक छोटा अक्षर के बाद आरक्षित हैं
- अतिरिक्त स्ट्रिंग और सरणी फ़ंक्शन के लिए।
- किसी लोअरकेस अक्षर के साथ
PRI
या SCN
उसके बाद शुरू होने वाले नाम या X
आरक्षित हैं
- अतिरिक्त प्रारूप निर्दिष्ट मैक्रोज़ के लिए
- जो नाम समाप्त होते
_t
हैं, वे आरक्षित होते हैं
- अतिरिक्त प्रकार के नामों के लिए।
अपने स्वयं के प्रयोजनों के लिए इन नामों का उपयोग करते समय अभी समस्या पैदा नहीं हो सकती है, वे उस मानक के भविष्य के संस्करणों के साथ संघर्ष की संभावना को बढ़ाते हैं।
व्यक्तिगत रूप से मैं सिर्फ अंडरस्कोर वाले पहचानकर्ताओं को शुरू नहीं करता हूं। मेरे नियम के अलावा नया: कहीं भी डबल अंडरस्कोर का उपयोग न करें, जो आसान है क्योंकि मैं शायद ही कभी अंडरस्कोर का उपयोग करता हूं।
इस लेख पर शोध करने के बाद मैं अपने पहचानकर्ताओं को समाप्त नहीं करता _t
क्योंकि यह POSIX मानक द्वारा आरक्षित है।
किसी भी पहचानकर्ता के समाप्त होने के बारे में नियम ने _t
मुझे बहुत आश्चर्यचकित किया। मुझे लगता है कि स्पष्टीकरण और आधिकारिक अध्याय और पद्य की तलाश में यह एक POSIX मानक है (अभी तक निश्चित नहीं है)। यह जीएनयू लिबटूल मैनुअल से है , आरक्षित नामों को सूचीबद्ध करता है।
CesarB ने POSIX 2004 आरक्षित प्रतीकों और नोटों के लिए निम्न लिंक प्रदान किया है 'कई अन्य आरक्षित उपसर्गों और प्रत्ययों ... वहाँ पाया जा सकता है'।
POSIX 2008 सुरक्षित प्रतीकों यहाँ परिभाषित कर रहे हैं। प्रतिबंध कुछ हद तक ऊपर की तुलना में अति सूक्ष्म हैं।