Visual C++编译程序版本

预定义宏的官方文档 在Visual C++中

null

这个博客是加布里埃尔·多斯雷斯和马克·莱文写的。

从VS“15”预览5开始,VisualC++团队单调地更新内置预处理器宏的值。 _MSC_VER 在每个VisualC++工具集更新中。

为什么?

由于VisualC++团队在ISO C++实现一致性领域的投资和进展,我们一直在传输新的语言特性,并以前所未有的速度引入新的一致性变化。  我们的客户,特别是对Visual C++工具集的更新。  因此,我们的客户有必要在他们的源代码中有一个好的方法来区分VC++的更新(而不仅仅是主要版本)。  例如,一个程序,希望利用C++ 11 No除了VC++以外的特征,通常会写:

#if _MSC_VER >= 1900// … use noexcept here …#endif

如何测试?

传统上,开发人员编写有条件包含的代码片段来测试内置预处理器宏的值 _MSC_VER 针对已知的VisualC++编译器的主要版本的值。例如,

_MSC_VER >= 1900

测试VS2015 RTM发布后的Visual C++编译器的任何版本。这仍然是我们的建议做法。我们正在做的是,从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。但是,一般来说,我们建议您使用“ >= “并按降序排列测试。

寻找一组封闭的编译器版本

有些情况需要寻找一组封闭的编译器版本。例如,这个代码片段

#if _MSC_VER >= 1900 && _MSC_VER < 2000	“mspdb140.dll”#endif

包括字符串文字 “mspdb140.dll” 仅当编译器来自VS2015版本时。在这些情况下,您将使用“ >= “和” < “构造一个半开放的间隔来限定您感兴趣的发布系列。

我应该在什么时候使用u MSC u FULL u VER?

_MSC_FULL_VER 是内置预处理器宏的一个更细粒度的变体 _MSC_VER 它还包含编译器的内部版本号。当您想要区分同一更新的微更新时,可以使用此选项。到目前为止,它还被用来区分不同的更新。

你的建筑怎么样?

它是一个内置的预处理器宏,有文档记录 在这里 在大多数C或C++源代码中很少使用或需要。

编译器版本控制方案

VisualC++编译器的每个主要版本都增加了“数百”的 _MSC_VER . 主要版本中的每次更新都会将“单位”增加1。例如,在VS“15”Preview 5中,宏 _MSC_VER 计算结果为1910。下一次更新将 _MSC_VER 设定为1911年。

请注意,VS“15”和VS2015都是VisualStudio的主要版本,具有不同的主要版本号。但是,所包含的编译器工具集将具有相同的主版本号–通过此处描述的更改,可以使用次版本号来区分编译器工具集。

行动号召

如果您有比较 _MSC_VER 使用相等运算符,再看一眼,看看上面解释的“较大”或“相等”运算符是否能更好地表达这种比较。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享