C++ 如何检测g++;和MinGW在C++;预处理器?

C++ 如何检测g++;和MinGW在C++;预处理器?,c++,g++,mingw,c-preprocessor,gnu,C++,G++,Mingw,C Preprocessor,Gnu,我想做一些类似的事情: #ifdef GCC #define GetFunctionName() string("My function name is ") + __PRETTY_FUNCTION__; #endif 因为我想使用prettypretty_函数,据我所知,这只受gnu支持,所以我需要检测我是否为g++和MinGW编译,我该怎么做?我猜我需要知道的只是编译器的预处理器定义,就像下面我为微软做的一样 #ifdef WIN32 #define LogFuncBegin() gLog

我想做一些类似的事情:

#ifdef GCC
#define GetFunctionName() string("My function name is ") + __PRETTY_FUNCTION__;
#endif
因为我想使用prettypretty_函数,据我所知,这只受gnu支持,所以我需要检测我是否为g++和MinGW编译,我该怎么做?我猜我需要知道的只是编译器的预处理器定义,就像下面我为微软做的一样

#ifdef WIN32
#define LogFuncBegin() gLogger.FuncBegin( __FUNCTION__ );
#define LogFuncEndSuccess() gLogger.FuncEndSuccess( __FUNCTION__ );
#endif
<如何在C++预处理器中检测G++和MinGW?< G/C> < P> > GCC:< /P>
#ifdef __GNUC__
对于MinGW:

#ifdef __MINGW32__
x86-w64-w64-mingw32-gcc定义了
\uuuuuw32\uuuuu
\uuuuuuu-MINGW64\uuuu
您可以使用:

#ifdef __GNUC__
#ifdef __MINGW32__

对于其他宏,您可能会感兴趣的是,哪些显示了其他编译器宏

您的测试用例是否包括MinGW-64?@jww否,但MinGW-64也将定义32宏,这也适用于此。编译器宏列表的最新版本在“您的测试用例是否包含MinGW-64”中?此答案是在MinGW-64之前编写的。但我认为这也定义了
\uuu MINGW32\uu
宏。所以应该仍然有效这是一个没有实际意义的观点。我找不到。。。。解决一个不存在的问题是没有意义的。@jww-MinGW-w64是一个很难解决的问题,因为MinGW做得不好。现在几乎每个人都在使用MinGW-w64,而不是原来的MinGW。与MSYS2和MSYS相同。