有没有办法在代码中找出编译器的版本?

时间:2013-07-25 10:46:38

标签: c++ compiler-construction

是否可以在代码中获取编译器的版本?例如使用一些编译器指令?
我试图找到编译器的版本然后让我们说GccVisual C++的版本是否C++11兼容然后编译这段代码,如果没有它编译那个片段而是

3 个答案:

答案 0 :(得分:2)

您可以使用__cplusplus宏来检查编译器是否支持C ++ 11,以便它甚至可以在您不了解的编译器上运行。

#if __cplusplus >= 201103L
//C++ 11 code here
#endif

16.8预定义的宏名称

1以下宏名称应由__cplusplus定义 在编译C ++转换单元时,名称__cplusplus被定义为值201103L。

157)本标准的未来版本旨在用更大的值替换此宏的值。不合格的编译器应使用最多五位小数的值。

答案 1 :(得分:1)

在gcc和clang中,您可以使用__VERSION__宏。

答案 2 :(得分:1)

如果你想知道你正在使用什么编译器,他们有自己的预定义宏,在其他注释中链接。但是,为了发现C ++ 11支持的存在,您表明您正在这样做。在这种情况下,正确的代码是

#if __cplusplus <= 199711L
    //No C++11 support
#else
    //Congratulations, C++11 support!
#endif

根据标准,编译器需要设置该变量,并指示版本。在Bjarne's page

上查看