C++ 使用优雅的C/C+检测操作系统类型/编译器+;代码(尤其是gcc/g+;+;)

C++ 使用优雅的C/C+检测操作系统类型/编译器+;代码(尤其是gcc/g+;+;),c++,compiler-construction,operating-system,detection,C++,Compiler Construction,Operating System,Detection,我知道我可以检测编译器类型(例如gcc:)。但是g++呢?如果Im使用g++,我是否也可以使用\uuuu GNUC\uuuu宏进行测试 关于操作系统类型的另一个问题。我知道,我能做到: #if defined(__linux__) /* Linux. --------------------------------------------------- */ #endif 但如何让它成为一个优雅的解决方案呢?将其作为主要功能中的第一个?我的意思是: #include <iost

我知道我可以检测编译器类型(例如gcc:)。但是g++呢?如果Im使用g++,我是否也可以使用
\uuuu GNUC\uuuu
宏进行测试

关于操作系统类型的另一个问题。我知道,我能做到:

#if defined(__linux__)
    /* Linux. --------------------------------------------------- */

#endif
但如何让它成为一个优雅的解决方案呢?将其作为主要功能中的第一个?我的意思是:

#include <iostream>

int compiler()
{
    #if defined (__GNUC__)
        return 0;
    #elif defined (_MSC_VER)
        return 1;
    #else
        return -1;
    #endif;
}

int os()
{
    #if defined(_WIN32) || defined(_WIN64)
        return 0;
    #elif defined(__linux__)
        return 1;
    #else
        return -1;
    #endif
}

int main(int argc, char **argv)
{
    std::cout << compiler() << "\n";
    std::cout << os();
    return 0;
}
#包括
int编译器()
{
#如果已定义(_GNUC__)
返回0;
#elif已定义(\u MSC\u VER)
返回1;
#否则
返回-1;
#endif;
}
intos()
{
#如果已定义(_WIN32)| |已定义(_WIN64)
返回0;
#已定义的elif(_linux__;)
返回1;
#否则
返回-1;
#恩迪夫
}
int main(int argc,字符**argv)
{

STD::CUTE考虑和实现你可能想按照编译器的某种方式做事。它的当前形式中的问题看起来很模糊。