2

是否可以在代码中获取编译器的版本?例如使用一些编译器指令?
我正在尝试查找编译器的版本,然后让我们说 or 的版本Gcc是否Visual C++兼容C++11,然后编译这段代码,如果不编译,则改为编译该代码段

4

3 回答 3

2

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

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

16.8 预定义的宏名称

1 下列宏名称应由__cplusplus 定义。名称__cplusplus 在编译C++ 翻译单元时定义为值201103L。

157) 本标准的未来版本打算用更大的值替换此宏的值。不符合标准的编译器应使用最多五个十进制数字的值。

于 2013-07-25T10:52:03.080 回答
1

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

于 2013-07-25T10:53:19.663 回答
1

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

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

根据标准,编译器需要设置该变量,并指示版本。在Bjarne 的页面上查看

于 2013-07-25T11:08:18.173 回答