2012-03-24 35 views
5

मैं कुछ सी कोड लिखने की कोशिश कर रहा हूं जो केवल पोर्टेबल है क्योंकि उपयोगकर्ता के पास gcc है, और glib स्थापित है।ग्लिब गनिचार और wchar_t के बीच क्या अंतर है और जो क्रॉस-प्लेटफ़ॉर्म समाधानों के लिए बेहतर है?

अपने सभी अनुसंधान से, मैं पाया है कि gcc के साथ, एक wchar_t हमेशा 4 बाइट के रूप में परिभाषित किया गया है, और glib के साथ एक gunichar भी 4 बाइट है।

क्या मैं नहीं पता लगा है, तो एक gunichar की तरह, एक wchar_t रूप में अच्छी तरह UCS4 के रूप में एन्कोड किया जाता है। क्या यह मामला है? यदि ऐसा है, तो gunichar* को wchar_t* पर डालने में सक्षम होना चाहिए और stdc wcs* फ़ंक्शंस का उपयोग करें, है ना?

उत्तर

8

यदि आप जीएलआईबी का उपयोग करते हैं, तो wchar_t का उपयोग न करें। अपने यूनिकोड समर्थन का उपयोग करें, यह सी मानक लाइब्रेरी के समर्थन से बहुत अधिक बेहतर है।

wchar_t लिनक्स और मैक ओएस (और कुछ अन्य) पर 4 बाइट्स है, विंडोज़ पर नहीं (यह 2 बाइट्स है) और कुछ अन्य। पोर्टेबल कोड का मतलब है प्लेग की तरह wchar_t से परहेज करना।

+0

हम्म। धन्यवाद। मैंने अभी देखा है कि लगभग सभी ग्लिब यूनिकोड फ़ंक्शन utf8 स्ट्रिंग्स पर काम करते हैं, और जो मैं समझता हूं (गलत हो सकता है) से एक बहु-बाइट एन्कोडेड चार सरणी के माध्यम से पुन: प्रयास करना अक्षम है क्योंकि आपको यह सुनिश्चित करने के लिए एक इटरेटर का उपयोग करने की आवश्यकता है पूर्ण चार और बस एक बाइट नहीं (केवल सरणी के माध्यम से मैं आपको ++ नहीं कर सकता)। मैंने अभी दस्तावेज़ों को दोबारा जांच लिया है और g_utf8_next_char() को मैक्रो के रूप में कार्यान्वित किया गया है, इसलिए मुझे लगता है कि अब मुझे यह कोई मुद्दा नहीं है। एक बार फिर धन्यवाद। – ckot

+1

@skot सभ्य यूनिकोड समर्थन महंगा है, किसी भी तरह से आप इसे डाल दिया। एक बार आपका प्रोग्राम/लाइब्रेरी काम करने के बाद प्रदर्शन के बारे में चिंता करें, पहले नहीं। – rubenvb

+1

अच्छा बिंदु। चीजें अब तक अच्छी तरह से काम कर रही प्रतीत होती हैं, इसलिए अगर मुझे जरूरत है तो मैं उस पुल को पार कर दूंगा। एक बार फिर धन्यवाद। – ckot

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

  • कोई संबंधित समस्या नहीं^_^