अद्यतन - यह जवाब, हालांकि यह मेरे और दूसरों के लिए समझ में आता था, यह काफी हद तक गलत निकला (और इरादे के बारे में पर्याप्त रूप से गलत है, जैसा कि प्रभावी रूप से सिर्फ सादा गलत है)। चूंकि (एपीग्रामग्राम की एक टिप्पणी में कहा गया है) यह स्ट्रिंग स्थिरांक के बाहर यूसीएस का उपयोग करने की अनुमति नहीं है, जब एक ही चरित्र को सामान्य रूप से आधार चरित्र सेट में दर्शाया जा सकता है। इसलिए, इसका उपयोग कीवर्ड से बचने के लिए नहीं, जैसा कि मेरे उदाहरण में है; और इसका उपयोग करके 'पहचानकर्ताओं' की तरह 23skiddo
बचकर भागना नहीं है2
। यह अभी भी बाहरी भाषाओं के साथ संगत नाम बनाने के लिए इस्तेमाल किया जा सकता है, मुझे लगता है, लेकिन केवल, ऐसा लगता है, जब वे नाम या तो एक अक्षर या एक विस्तारित चरित्र के साथ शुरू होते हैं, और केवल अक्षर, अंक, रेखांकित और विस्तारित वर्ण होते हैं - जो कि इरादे का ठीक से समर्थन करने के लिए बहुत अधिक प्रतिबंधात्मक लगता है। इसलिए यह होना चाहिए कि पहचानकर्ताओं में इन अतिरिक्त पात्रों की अनुमति देने के लिए और स्रोत संपादकों को जहां इन अक्षरों को रेखांकन रूप से प्रदर्शित किया जाता है, को सक्षम करने के लिए मुख्य आशय (AProgrammer के उत्तर में) है, जबकि अभी भी स्रोत फ़ाइल को सादे ASCII में रखने की अनुमति है।
C ++ प्रोग्राम अन्य भाषाओं में लिखे गए कार्यों को कह सकते हैं। मानकीकरण समिति की ओर से यह सुनिश्चित करना अच्छी रणनीति है कि C ++ अन्य भाषाओं के साथ परस्पर क्रियाशील होगी जो फ़ंक्शन नामों में गैर-अल्फ़ान्यूमेरिक्स या यूनिकोड वर्ण की अनुमति दे सकती है, भले ही ऐसी भाषाएँ अभी भी मौजूद न हों। मानक को यह निर्दिष्ट करने की आवश्यकता नहीं है कि यह लिंकर स्तर पर कैसे काम करेगा, आदि; लेकिन इसकी अनुमति देने के लिए एक निर्दिष्ट तंत्र होना अच्छा है।
इसके लिए उपयोग देखने के लिए आपको भविष्य में देखने की आवश्यकता नहीं है। मान लीजिए कि मेरे पास एक पुरानी सी लाइब्रेरी है, जिसमें एक फंक्शन है, जिसे catch
(या संरक्षित, या म्यूटेबल) कहा जाता है ... और मैं इसे C ++ से कॉल करना चाहता हूं। और जिस भी कारण से मैं C कोड को संशोधित नहीं करना चाहता या नहीं कर सकता (वैसे, मेरे पास पुराने C कोड से निपटने के लिए एक से अधिक बार एक फ़ंक्शन नाम का उपयोग किया गया था जो C ++ कीवर्ड बन गया था ...)
UC नामों के साथ मैं इसे हेडर में लिख सकता हूं, और उसके बाद बस 'catch_func ()' कहूंगा।
extern "C" {
int catc\u0068( int a, int b ); // C 'catch()' function
}
inline int catch_func( int a, int b ) { return catc\u0068(a,b); }
यकीन है कि यह बदसूरत है, लेकिन इससे कोई फर्क नहीं पड़ता क्योंकि यह हेडर में केवल एक जगह है। अन्य भाषाओं में कॉल फ़ंक्शंस के लिए स्टब्स बनाने के लिए एक ही दृष्टिकोण का उपयोग किया जा सकता है, और काम करता है, भले ही नाम सी ++ कीवर्ड या यूनिकोड, या रिक्त स्थान हो, .
या अन्य विराम चिह्न उनमें एम्बेडेड हों।
विभिन्न अन्य भाषाओं में ऐसे उपकरण होते हैं जो पहचानकर्ताओं के निर्माण की अनुमति देते हैं जो सामान्य पैटर्न का पालन नहीं करते हैं; Verilog में उदाहरण के लिए, \abcd
करने के लिए एक पहचानकर्ता के बराबर है abcd
, लेकिन \while
और \23skidoo
और \44.e2
पहचानकर्ता भी है, जो बैकस्लैश उपसर्ग इस तरह के रूप में देखा जा करने की जरूरत है। वेरिलोग का उपयोग करने के तरीके के कारण, किसी भी नाम की अनुमति देना महत्वपूर्ण है, जहां वे बाहरी इंटरफेस से संबंधित हैं।