2013-07-05 11 views
27

voglio fare qualcosa di simile:Come posso rilevare g ++ e MinGW nel preprocessore C++?

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

Dato che voglio usare abbastanza PRETTY_FUNCTION questo è supportata solo da GNU per quanto ne so quindi ho bisogno di rilevare se sto eseguendo la compilazione di g ++ e MinGW, Come lo posso fare? Sto indovinando tutto quello che ho bisogno di sapere sono le definizioni del preprocessore del compilatore, come ho fatto per Microsoft qui sotto.

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

Come posso rilevare g ++ e MinGW nel preprocessore C++?

risposta

36

È possibile fare uso di:

#ifdef __GNUC__ 
#ifdef __MINGW32__ 

Per ulteriori macro vi potrebbe essere interessato a this page che mostra altre macro compilatore

+0

I casi di test includevano MinGW-64? – jww

+0

@jww No, ma MinGW-64 definirà anche la macro 32, quindi funzionerebbe anche per quello. –

+1

Una versione più aggiornata di tale elenco di macro del compilatore si trova nel [Pre-defined Compiler Macros project a sourceforge] (https://sourceforge.net/p/predef/wiki/Home/) – rakslice

23

Per GCC:

#ifdef __GNUC__ 

Per MinGW:

#ifdef __MINGW32__ 

x86_64-W64-mingw32-gcc definisce sia __MINGW32__ e __MINGW64__.

+2

I Suoi casi di test comprendono MinGW-64? – jww

+2

Questa risposta è stata scritta pre-MinGW-64. Ma penso che definisca anche la macro '__MINGW32__'. Quindi dovrebbe funzionare ancora – sedavidw

+0

Questo è un po 'un punto controverso. Non riesco a trovare un [MinGW-64 offerto dal progetto] (http://www.mingw.org/) .... Non ha senso risolvere un problema che non esiste .... – jww