VC++ 编译器的版本

[原文发表地址]  VC++编译器的版本 [原文发表时间] 2016/10/05 从VS “15” preview 5开始,VC++团队在每一个VC++工具集的更新中都逐步更新内置预编译处理程序宏指令_MSC_VER的值。 为什么这么做? 多亏了VC++团队在ISO C++领域的实现做出的投入和取得的进展,我们已经迅速上线了客户从未见过的新的语言特征并且引进了新的一致性的更改,尤其是在VC++工具集的更新中。因此,客户需要在他们的源代码中用好的方法区分VC++(不只是主要的版本)的更新版本。例如,一个想要利用VC++的C++ 11 noexcept 操作符特征的程序通常要写: #if _MSC_VER >=1900 // …use noexcept here … #endif 怎么测试? 传统情况下,开发者编写有包含条件的代码片段测试内置预编译处理程序宏_MSC_VER的值和显示了VC++编译器主要发布版本的已知的值做对比。比如: _MSC_VER >=1900 测试VC++编译器在VS2015 RTM之后的任意发布的版本。这一直是我们推荐的做法。从VS 15“开始,我们一直在做的目的是每一次更新都让_MSC_VER的值有一个增量。 在给定参照点之后测试VC++更新或者发布,请使用 “>=”(大于或者等于)操作符来对比_MSC_VER和已知的引用值。另外,如果你用有几个参考点在互斥的状态下比较,我们推荐你根据参照值降序排列的方式排列要对比的值。例如,以下代码片段 #if _MSC_VER >=1900 // … #elif _MSC_VER >=1800 // … #else // … #endif 查看VS2015之后发布的编译器,然后查看VS2013之后发布的编译器,然后查看VS2013之前的较早发布的编译器。 <的顺序测试 如果你选择用小于操作符(<),那么我们推荐你根据参照值升序的方式排列你的参考值。 检测一个指定的编译器版本 偶尔,你可能会找一个特定的VC++发布版本。只有在这种情况下,你需要用到==操作符来比较_MSC_VER和已知的值。这种情况包括在一个熟知的VC++版本上处理一个bug。然而,一般情况下,我们推荐你用”>=”来降序排列你的tests。 在一个封闭集合中查找编译器版本 某些情况下会要求查找一个封闭集合中的编译器版本。例如,这个代码片段 #if _MSC_VER…

0