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

Edd*_*223 37 c++ gnu mingw g++ c-preprocessor

我想做的事情如下:

#ifdef GCC
#define GetFunctionName() string("My function name is ") + __PRETTY_FUNCTION__;
#endif
Run Code Online (Sandbox Code Playgroud)

由于我想使用漂亮的PRETTY_FUNCTION,据我所知只有gnu支持所以我需要检测我是否正在编译g ++和MinGW,我该怎么做?我猜我需要知道的是编译器的预处理器定义,就像我在下面为Microsoft做的那样.

#ifdef WIN32
#define LogFuncBegin() gLogger.FuncBegin( __FUNCTION__ );
#define LogFuncEndSuccess() gLogger.FuncEndSuccess( __FUNCTION__ );
#endif
Run Code Online (Sandbox Code Playgroud)

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

Flo*_*man 47

你可以利用:

#ifdef __GNUC__
#ifdef __MINGW32__
Run Code Online (Sandbox Code Playgroud)

对于其他宏,您可能会对显示其他编译器宏的页面感兴趣

  • 该编译器宏列表的最新版本位于 [sourceforge 上的预定义编译器宏项目](https://sourceforge.net/p/predef/wiki/Home/) (5认同)

sed*_*idw 29

对于GCC:

#ifdef __GNUC__
Run Code Online (Sandbox Code Playgroud)

对于MinGW:

#ifdef __MINGW32__
Run Code Online (Sandbox Code Playgroud)

x86_64-w64-mingw32-gcc定义了__MINGW32____MINGW64__.

  • @jww MinGW-w64是MinGW的硬分叉,因为MinGW没有做得很好.几乎每个人都使用MinGW-w64,而不是最初的MinGW.与MSYS2和MSYS相同. (3认同)
  • 您的测试案例是否包含MinGW-64? (2认同)
  • 这个答案是在MinGW-64之前写的.但我认为它也定义了`__MINGW32__`宏.所以应该仍然有效 (2认同)