2013-07-05 4 views
27

मैं की तरह कुछ करना चाहता हूँ: जब से मैं बहुत PRETTY_FUNCTION यह केवल gnu द्वारा समर्थित है का उपयोग करना चाहतेमैं सी ++ प्रीप्रोसेसर में जी ++ और मिनजीडब्ल्यू का पता कैसे लगा सकता हूं?

#ifdef GCC 
#define GetFunctionName() string("My function name is ") + __PRETTY_FUNCTION__; 
#endif 

जहाँ तक मुझे पता है तो मैं अगर मैं जी के लिए संकलन हूँ ++ और MinGW का पता लगाने की जरूरत है, मैं उसे कैसे कर सकता हूँ? मुझे लगता है कि मुझे यह जानने की ज़रूरत है कि संकलक की प्रीप्रोसेसर परिभाषाएं हैं, जैसे मैंने नीचे माइक्रोसॉफ्ट के लिए किया था।

#ifdef WIN32 
#define LogFuncBegin() gLogger.FuncBegin(__FUNCTION__); 
#define LogFuncEndSuccess() gLogger.FuncEndSuccess(__FUNCTION__); 
#endif 

मैं जी कैसे पता लगा सकते हैं ++ और सी में MinGW ++ पूर्वप्रक्रमक?

उत्तर

36

आप का उपयोग कर सकते: अतिरिक्त मैक्रो के लिए

#ifdef __GNUC__ 
#ifdef __MINGW32__ 

आप this page में रुचि हो सकती है जो अन्य संकलक मैक्रो से पता चलता

+0

क्या आपके परीक्षण मामलों में मिनजीडब्ल्यू -64 शामिल था? – jww

+0

@jww नहीं, लेकिन MinGW-64 भी 32 मैक्रो को परिभाषित करेगा, इसलिए यह इसके लिए भी काम करेगा। –

+1

उस कंपाइलर मैक्रोज़ सूची का एक और अद्यतित संस्करण [Sourceforge पर पूर्व परिभाषित कंपाइलर मैक्रोज़ प्रोजेक्ट] में है (https://sourceforge.net/p/predef/wiki/Home/) – rakslice

23

जीसीसी के लिए:

#ifdef __GNUC__ 

MinGW के लिए:

#ifdef __MINGW32__ 

x86_64-W64-mingw32-जीसीसी __MINGW32__ और __MINGW64__ दोनों को परिभाषित करता है।

+2

अपने परीक्षण मामलों MinGW -64 में शामिल किया था? – jww

+2

यह उत्तर पूर्व-मिनजीडब्ल्यू -64 लिखा गया था। लेकिन मुझे लगता है कि '__MINGW32__' मैक्रो भी परिभाषित करता है। तो अभी भी – sedavidw

+0

काम करना चाहिए यह एक महत्वपूर्ण बिंदु है। मुझे एक परियोजना [MinGW-64 प्रोजेक्ट द्वारा प्रदान नहीं किया जा सकता है] (http://www.mingw.org/) .... ऐसी समस्या को हल करने में कोई समझ नहीं है जो मौजूद नहीं है .... – jww

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