2009-06-01 10 views
16

सी ++ मानक पहचानकर्ताओं में डॉलर संकेतों का उपयोग करने के बारे में क्या कहता है, जैसे कि Hello$World? क्या वे कानूनी हैं?सी ++ 03 में पहचानकर्ताओं में डॉलर-संकेतों की अनुमति है?

+3

@Zifre: मेरा मानना ​​है कि वह सी ++ मानक के बारे में पूछ रहा है क्योंकि सभी कंपाइलर्स 100% मानक अनुपालन नहीं हैं और कुछ के पास अपने स्वयं के एक्सटेंशन हैं जो इसे कानूनी बना सकते हैं। –

+3

सी 99 मानक स्पष्ट रूप से अतिरिक्त कानूनी पहचानकर्ता पात्रों को परिभाषित करने के लिए एक मंच की अनुमति देता है। पीडीपी 11 और वीएक्स दोनों के लिए डिकस सी कंपाइलर ने $ की अनुमति दी, क्योंकि अधिकांश सिस्टम कॉलों में उनके नाम पर एक $ शामिल था। "$ डिजिटल के लिए आरक्षित है"। मेरे पास पुराना सी मानकों या सी ++ मानक नहीं है यह जांचने के लिए कि क्या यह अनुपालन करेगा ... – RBerteig

+8

@Zifre: क्या आपकी टिप्पणी अब और आवश्यक थी?और चूंकि आप पूछने की आवश्यकता, नहीं, वह simpl नहीं कर सका संकलक यह अनुमति दी है, भाषा नहीं किया है कि क्या है कि क्या, अपने पसंदीदा संकलक में यह कोशिश है क्योंकि वह उसे बताना होगा। सी ++ में, यह एक महत्वपूर्ण भेद है। – jalf

उत्तर

16

एक सी ++ पहचानकर्ता निम्न में से किसी भी से बना हो सकता है: _ (अंडरस्कोर), अंक 0-9, अक्षर ए-जेड (दोनों ऊपरी और निचले मामले) और एक संख्या से शुरू नहीं हो सकते हैं।

कई अपवाद हैं क्योंकि सी 99 मानक को एक्सटेंशन की अनुमति देता है (उदा। visual studio)।

+3

यह मूर्खतापूर्ण है कि इसे वीएस में अनुमति है। एमएस * हमेशा * मानक ... – Zifre

+15

हर प्रमुख सी ++ संकलक एक्सटेंशन का एक अच्छा मुट्ठी भर है करने के लिए अपने स्वयं के एक्सटेंशन बनाने के लिए है। एमएस उसमें अद्वितीय नहीं है। – jalf

+11

जीसीसी डॉलर के संकेतों की भी अनुमति देता है। –

14

वे अवैध हैं। पहचानकर्ताओं में एकमात्र कानूनी पात्र अक्षर, संख्याएं और _ हैं। पहचानकर्ता भी संख्याओं से शुरू नहीं कर सकते हैं।

+4

FYI करें: हालांकि मानक जीसीसी द्वारा अवैध रूप से आम तौर पर उन्हें अनुमति देता है, http://gcc.gnu.org/onlinedocs/gcc/Dollar-Signs.html#Dollar-Signs – lothar

+3

देखना यह पिछड़े संगतता अनुमति है। इसका उपयोग किसी भी आधुनिक कोड के लिए नहीं किया जाना चाहिए। –

0

वे सी ++ में कानूनी नहीं हैं। हालांकि कुछ सी/सी ++ व्युत्पन्न भाषाएं (जैसे जावा और जावास्क्रिप्ट) उन्हें अनुमति देते हैं।

0

अवैध। मुझे लगता है कि डॉलर के संकेत और बैकटिक मेरे कीबोर्ड पर एकमात्र विराम चिह्न हैं जो सी ++ में कहीं भी उपयोग नहीं किए जाते हैं ("%" चिह्न प्रारूप स्ट्रिंग में है, जो सी मानक के संदर्भ में सी ++ में हैं)।

+7

% मॉड्यूलस ऑपरेटर भी है। – RBerteig

+0

आह, धन्यवाद। वह मेरे दिमाग से बच निकला था। –

+5

@ अक्षर मत भूलना –

8

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

1

प्रासंगिक अनुभाग "2.8 पहचानकर्ता [lex.name]" है। मूल चरित्र सेट से, केवल वैध वर्ण ए-जेड ए-जे 0-9 और _ हैं। हालांकि, é (यू + 00 ई 9) जैसे पात्रों की भी अनुमति है। आपके कंपाइलर के आधार पर, आपको \ u00e9 के रूप में प्रवेश करने की आवश्यकता हो सकती है, हालांकि।

11

सी ++ 03 में, पहले दिए गए उत्तर सही हैं: वे अवैध हैं। C++11 में स्थिति फिर भी बदल दिया है:

जवाब यहाँ है "शायद":
अनुसार करने के लिए §2.11, पहचानकर्ता, अंक और पहचानकर्ता-nondigits शामिल हो सकते हैं उत्तरार्द्ध में से एक के साथ शुरू । के बाद से सी ++ 11 वे सार्वभौमिक-चरित्र-नाम (जैसे \uBEAF, \UC0FFEE32), और अन्य कार्यान्वयन से परिभाषित वर्ण शामिल पहचानकर्ता-nondigits अलावा सामान्य a-z, A-Z कर रहे हैं और अंडरस्कोर,। तो पहचानकर्ता में $ का उपयोग करने पर यह कार्यान्वयन परिभाषित किया गया है। वीसी 10 और ऊपर इसका समर्थन करता है, शायद पहले के संस्करण भी। यह こんばんは जैसे पहचानकर्ताओं का भी समर्थन करता है।

लेकिन: मैं उनका उपयोग नहीं करता। पहचानकर्ताओं को यथासंभव पठनीय और पोर्टेबल के रूप में बनाओ। $ कार्यान्वयन परिभाषित किया गया है और इस प्रकार पोर्टेबल नहीं है।

संबंधित मुद्दे