2013-07-05 8 views
27

Ich möchte wie etwas tun:Wie kann ich g ++ und MinGW in C++ Präprozessor erkennen?

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

Da I verwenden wollen, dieses hübsche PRETTY_FUNCTION nur von Gnu unterstützt, soweit ich weiß, so muss ich feststellen, ob ich für g bin Kompilieren ++ und MinGW, wie kann ich das machen? Ich denke, alles, was ich wissen muss, sind die Präprozessordefinitionen des Compilers, wie ich es für Microsoft unten getan habe.

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

Wie kann ich g ++ und MinGW in C++ Präprozessor erkennen?

Antwort

36

können Sie Gebrauch machen:

#ifdef __GNUC__ 
#ifdef __MINGW32__ 

Für zusätzliche Makros Sie könnten in this page interessiert sein, welche Makros andere Compiler zeigt

+0

Haben Ihre Testfälle MinGW-64 enthalten? – jww

+0

@jww Nein, aber MinGW-64 definiert auch das Makro 32, also würde das auch funktionieren. –

+1

Eine aktuellere Version dieser Compiler-Makrosliste befindet sich im [Pre-defined Compiler Macros-Projekt bei sourceforge] (https://sourceforge.net/p/predef/wiki/Home/) – rakslice

23

Für GCC:

#ifdef __GNUC__ 

Für MinGW:

#ifdef __MINGW32__ 

x86_64-W64-mingw32-gcc definiert sowohl __MINGW32__ und __MINGW64__.

+2

Haben Sie Ihre Testfälle umfassen MinGW-64? – jww

+2

Diese Antwort wurde vor MinGW-64 geschrieben. Aber ich denke, das definiert auch das '__MINGW32__' Makro. Also sollte noch funktionieren – sedavidw

+0

Das ist ein strittiger Punkt. Ich kann kein [MinGW-64, das vom Projekt angeboten wird] (http://www.mingw.org/) finden .... Es hat keinen Sinn, ein Problem zu lösen, das nicht existiert .... – jww