【问题标题】:How can I detect g++ and MinGW in C++ preprocessor?如何在 C++ 预处理器中检测 g++ 和 MinGW?
【发布时间】:2013-07-03 20:16:19
【问题描述】:

我想做这样的事情:

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

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

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

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

【问题讨论】:

    标签: c++ g++ mingw c-preprocessor gnu


    【解决方案1】:

    您可以使用:

    #ifdef __GNUC__
    #ifdef __MINGW32__
    

    对于其他宏,您可能对 this page 感兴趣,它显示了其他编译​​器宏

    【讨论】:

    【解决方案2】:

    对于 GCC:

    #ifdef __GNUC__
    

    对于 MinGW:

    #ifdef __MINGW32__
    

    x86_64-w64-mingw32-gcc 定义了__MINGW32____MINGW64__

    【讨论】:

    • 您的测试用例是否包含 MinGW-64?
    • 这个答案是在 MinGW-64 之前编写的。但我认为这也定义了__MINGW32__ 宏。所以应该仍然有效
    • 这有点争议。我找不到MinGW-64 offered by the project.... 解决不存在的问题毫无意义....
    • @jww MinGW-w64 是 MinGW 的硬分叉,因为 MinGW 做得不好。现在几乎每个人都使用 MinGW-w64,而不是原来的 MinGW。与 MSYS2 和 MSYS 相同。
    猜你喜欢
    • 1970-01-01
    • 2015-10-17
    • 1970-01-01
    • 2010-11-14
    • 2021-10-19
    • 2013-08-21
    • 2016-09-11
    • 1970-01-01
    • 2016-11-14
    相关资源
    最近更新 更多