web-dev-qa-db-fra.com

Comment détecter g ++ et MinGW dans le préprocesseur C ++?

Je veux faire quelque chose comme:

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

Étant donné que je veux utiliser pretty PRETTY_FUNCTION cela n'est pris en charge par gnu qu'à ma connaissance, j'ai donc besoin de détecter si je compile pour g ++ et MinGW, comment puis-je faire cela? Je suppose que tout ce que je dois savoir, ce sont les définitions de préprocesseur du compilateur, comme je l'ai fait pour Microsoft ci-dessous.

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

Comment détecter g ++ et MinGW dans le préprocesseur C++?

37
EddieV223

Vous pouvez utiliser:

#ifdef __GNUC__
#ifdef __MINGW32__

Pour les macros supplémentaires, vous pourriez être intéressé par cette page qui montre d'autres macros du compilateur

46
Floris Velleman

Pour GCC:

#ifdef __GNUC__

Pour MinGW:

#ifdef __MINGW32__

x86_64-w64-mingw32-gcc définit les deux __MINGW32__ et __MINGW64__.

29
sedavidw