I want to do something like:
#ifdef GCC #define GetFunctionName() string("My function name is ") + __PRETTY_FUNCTION__; #endif
Since I want to use pretty PRETTY_FUNCTION this is only supported by gnu as far as I know so I need to detect if I am compiling for g++ and MinGW, how can I do that? I'm guessing all I need to know are the compiler's preprocessor definitions, like I did for Microsoft below.
#ifdef WIN32 #define LogFuncBegin() gLogger.FuncBegin( __FUNCTION__ ); #define LogFuncEndSuccess() gLogger.FuncEndSuccess( __FUNCTION__ ); #endif
How can I detect g++ and MinGW in C++ preprocessor?
The standard compiler releases since 4.6 include front ends for C (gcc), C++ (g++), Objective-C, Objective-C++, Fortran (gfortran), Java (gcj), Ada (GNAT), and Go (gccgo). MinGW stands for "Minimalist GNU for Windows" It is essentially a tool set that includes some GNU software, including a port of GCC.
The preprocessor outputs one make rule containing the object file name for that source file, a colon, and the names of all the included files, including those coming from -include or -imacros command-line options.
You can make use of:
#ifdef __GNUC__ #ifdef __MINGW32__
For additional macro's you might be interested in this page which shows other compiler macros
For GCC:
#ifdef __GNUC__
For MinGW:
#ifdef __MINGW32__
x86_64-w64-mingw32-gcc defines both __MINGW32__
and __MINGW64__
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With