2010-03-25 17 views
5

मैं जीसीसी के तहत अपना प्रोजेक्ट संकलित करने की कोशिश कर रहा हूं (विजुअल स्टूडियो इसे निर्दोष रूप से संकलित करता है)।जीसीसी, यूनिकोड और __FUNCTION__

मेरे पास एक कस्टम जोर कार्य है जो एक wstring संदेश फेंकता है। यह का एक हिस्सा _ _FUNCTION__ मैक्रो, जो मैं "unicodize" MSDN से मैक्रो चौड़ा का उपयोग कर

#define WIDEN2(x) L ## x 
#define WIDEN(x) WIDEN2(x) 

यह MSVC में ठीक संकलित है, लेकिन यह जीसीसी में इस प्रिंट:

error: ‘L__FUNCTION__’ was not declared in this scope 

केवल समाधान मैं mbstowcs का उपयोग कर रनटाइम पर wstring करने के लिए __FUNCTION __ की सामग्री को परिवर्तित करने के लिए आ सकता हूं, लेकिन मैं इसे करने के लिए एक संकलन-समय तरीका ढूंढना चाहता हूं।

सहायता के लिए धन्यवाद।

+0

आपको अपना '__FUNCTION__' मैक्रो पोस्ट करना चाहिए। – Gabe

+1

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

उत्तर

5

जीसीसी __FUNCTION__ में एक गैर मानक विस्तार है। के शब्दों में: GCC Online Docs

जीसीसी 3.3 में और इससे पहले, सी में केवल, __FUNCTION__ और __PRETTY_FUNCTION__ स्ट्रिंग शाब्दिक रूप में इलाज कर रहे थे; वे का उपयोग char सरणी प्रारंभ करने के लिए किया जा सकता है, और उन्हें अन्य स्ट्रिंग अक्षर के साथ समेकित किया जा सकता है। जीसीसी 3.4 और बाद में उन्हें चर के रूप में व्यवहार करें, जैसे __func__। सी ++ में, __FUNCTION__ और __PRETTY_FUNCTION__ हमेशा चर होते हैं।

तो __FUNCTION__ के मोर्चे पर एल जोड़ने बस इसे L__FUNCTION__ जो शायद अपरिभाषित है में बदलने के लिए जा रहा है।

+1

तो मुझे लगता है कि रनटाइम रूपांतरण ही एकमात्र तरीका है? –

+0

तो मैंने इसे रनटाइम तरीका किया। उत्तर के लिए धन्यवाद। –

+0

उन्होंने बिल्ली को क्यों बदल दिया ?? ऐसा लगता है कि मैं हमेशा उनका इलाज करता हूं क्योंकि स्ट्रिंग अक्षर बहुत अधिक उपयोगी होंगे। – antred

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