2011-09-26 11 views
15

नया सी ++ 11 मानक हेडर <cuchar> का उल्लेख करता है, संभवतः सी 99 के <uchar.h> के समानता में।`<cuchar>` प्रदान करता है, और यह कहां दस्तावेज किया जाता है?

अब, हम जानते हैं कि सी ++ 11 new character types and literals लाता है जो विशेष रूप से यूटीएफ 16 और यूटीएफ 32 के लिए डिज़ाइन किए गए हैं, लेकिन मुझे नहीं लगता था कि भाषा में वास्तव में (सिस्टम-निर्भर) संकीर्ण मल्टीबाइट एन्कोडिंग को परिवर्तित करने के लिए फ़ंक्शन शामिल होंगे यूनिकोड एन्कोडिंग्स। हालांकि, मैं <cuchar> के लिए हेडर सारांशों में आया हूं जो mbrtoc16/c16rtombr और mbrtoc32/c32rtombr फ़ंक्शन का उल्लेख करता है जो ऐसा लगता है।

दुर्भाग्यवश, मानक हेडर सारांश से परे उन कार्यों के बारे में कुछ भी नहीं कहता है। उन कार्यों को परिभाषित किया गया है, वे वास्तव में क्या करते हैं और मैं उनके बारे में और कहां पढ़ सकता हूं? क्या इसका मतलब यह है कि किसी भी अतिरिक्त पुस्तकालयों की आवश्यकता के बिना, अब मानक सी ++ के साथ पूरी तरह से उचित यूनिकोड का उपयोग कर सकते हैं?

+0

सी मानक में? –

+0

@ आर। मार्टिनिन्हो फर्नांडीस: मेरे पास यह नहीं है - क्या आपके पास कोई विवरण है? यहां तक ​​कि सिर्फ वेब संदर्भ? –

+0

ओह, मुझे नवीनतम सी 99 ड्राफ्ट (एन 1124) में उनको नहीं मिल रहा है। वास्तव में, मुझे कोई भी उल्लेख 'uchar.h' भी नहीं मिला। –

उत्तर

5

इन्हें WG21 paper from 2005 में वर्णित किया गया था लेकिन विवरण अंतिम मानक में मौजूद नहीं है। उन्हें आईएसओ/आईईसी 1 9 76 9: 2004 में प्रलेखित किया गया है (प्रोग्रामिंग भाषा सी के लिए एक्सटेंशन नए चरित्र डेटा प्रकारों का समर्थन करने के लिए) (draft), जो सी ++ 11 मानक को संदर्भित करता है।

लेख बहुत बड़ा यहाँ पोस्ट करने के लिए है, लेकिन इन हस्ताक्षरों हैं:

size_t mbrtoc16(char16_t * pc16, const char * s, size_t n, mbstate_t * ps); 
size_t c16rtomb(char * s, char16_t c16, mbstate _t * ps); 
size_t mbrtoc32(char32_t * pc32, const char * s, size_t n, mbstate_t * ps); 
size_t c32rtomb(char * s, char32_t c32, mbstate_t * ps); 

कार्यों multibyte वर्ण और UTF-16 या UTF-32 वर्ण, क्रमशः, mbrtowc के लिए इसी तरह के बीच कनवर्ट। कोई गैर-पुनर्वित्त संस्करण नहीं हैं, और ईमानदारी से, उन्हें किसकी जरूरत है?

+0

क्या आपके पास यह एफडीआईएस (तालिका 7 9) में है? –

+0

@KerrekSB एफडीआईएस में केवल नामों के साथ तालिका शामिल है। संपादित करें: उन्हें मिला! –

+0

अपडेट के लिए धन्यवाद - किसी भी दस्तावेज पर उन्हें क्या करना है, और उनका संचालन कैसे किया जाता है? क्या यह बिल्कुल 'mbsrtowcs' जैसा है? (इस तरह से दिलचस्प है कि केवल पुनर्विक्रेता संस्करण है।) * संपादित करें: * ओह, नहीं, रुको, यह 'mbrtowc' जैसा है। तार नहीं, सिर्फ एक अक्षर। –

1

शायद सबसे अच्छा दस्तावेज जिसमें से मुझे पता है n1326 में, सी मानक पुस्तकालय में TR19769 जोड़ने का प्रस्ताव [संपादित करें: हालांकि इसे देखकर, एन 1010 कि आर। मार्टिनो फर्नांडीस ने उद्धृत किया है, वही]।

+0

धन्यवाद ... हालांकि अब मुझे लगता है कि मैं समझता हूं * कम *। उन मैक्रोज़ का क्या? क्या वे इस बात को प्रभावित करते हैं कि संकलक एन्कोडिंग का अनुवाद कैसे करता है? हम्मम्म .... –

+0

@ आर। मार्टिन्होफर्नैंड्स: लिंक किए गए दस्तावेज़ के अनुसार नहीं। यह कहता है कि ** यदि ** मैक्रोज़ को परिभाषित किया गया है, तो 'char32_t' UTF32-encoded है; * अन्यथा * एन्कोडिंग कार्यान्वयन-परिभाषित है। क्या इसका मतलब है कि अगर मैं मैक्रो सेट करता हूं, तो कंपाइलर को यूटीएफ 32 का उत्पादन करना पड़ता है, लेकिन अन्यथा यह नहीं होता है? –

+2

@KerrekSB सी ++ 11 मानक की तरह लगता है कि 'char16_t' के चरित्र और स्ट्रिंग अक्षर और' char32_t' की आवश्यकता होती है ताकि यूटीएफ -16 और यूटीएफ -32 हो, इसलिए सी ++ में मैक्रोज़ को परिभाषित किया जाना चाहिए, मुझे लगता है। –

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