VS、VC、MSVC 工具集、MSC_VER 宏版本号对应关系

209 阅读8分钟

=============================================================================================================================================================================================================================================================================================================================================================================================

Visual Studio (VS 版本号)VC++ 版本号MSVC 工具集版本号、以及 MSC_VER 宏值 的对应关系。

Visual Studio / VC++ / MSVC 对应关系表

Visual Studio 版本

VC++ 版本 (内部)

MSVC Toolset Version

_MSC_VER

宏值

备注

VS 6.0 (1998)

VC++ 6.0

-

1200

最早广泛使用的版本

VS .NET 2002

(7.0)

VC++ 7.0

-

1300

与 .NET 1.0 一起发布

VS .NET 2003

(7.1)

VC++ 7.1

-

1310

VS 2005

(8.x)

VC++ 8.0

-

1400

VS 2008

(9.x)

VC++ 9.0

-

1500

VS 2010

(10.x)

VC++ 10.0

-

1600

VS 2012

(11.x)

VC++ 11.0

-

1700

VS 2013

(12.x)

VC++ 12.0

-

1800

VS 2015

(14.x)

VC++ 14.0

14.00 (v140)

1900

从此版本开始 VC++ 内部版本号固定为 14.x

VS 2017 (15.x)

VC++ 14.1x

14.10 (v141) ~ 14.16

1910 ~ 1916

VS 2019 (16.x)

VC++ 14.2x

14.20 (v142) ~ 14.29

1920 ~ 1929

VS 2022 (17.x)

VC++ 14.3x

14.30 (v143) ~ 14.3x

1930 ~ 193x

当前持续更新中

Visual Studio 各年份版本对应的 主版本号(Major Version) 对照表:

VS 年份版本

主版本号 (Major Version)

VS 97

5.0

VS 6.0

6.0

VS .NET 2002

7.0

VS .NET 2003

7.1

VS 2005

8.0

VS 2008

9.0

VS 2010

10.0

VS 2012

11.0

VS 2013

12.0

VS 2015

14.0

VS 2017

15.0

VS 2019

16.0

VS 2022

17.0

💡 注意:

  • • VS 2015 的主版本号是 14.0,并不是 13.0(跳过了 13 避开“不吉利”的数字)。

  • • 主版本号对应的是 IDE 内部 DTE.Version 或者生成的程序集版本号的一部分。

下面地址中的msvc-170是说的VS主版本号 17.x

https://learn.microsoft.com/en-us/cpp/build/walkthrough-compiling-a-native-cpp-program-on-the-command-line?view=msvc-170

说明

  1. 1. VS 版本号
  • • VS 2015 之前,VC++ 的内部版本号和 VS 版本号是对应的(VC8.0、VC9.0…)。

  • • 从 VS 2015 开始,VC++ 内部版本号固定为 14.x,之后每次更新只是增加 小版本 (14.1x, 14.2x, 14.3x …)

  1. 2. MSVC Toolset version (v140, v141, v142, v143)
  • • 这个版本号常出现在 项目配置CMake 工具链里,代表使用的工具集。

  • • 对应关系是:

  • • VS2015 → v140

  • • VS2017 → v141

  • • VS2019 → v142

  • • VS2022 → v143

  1. 3. _MSC_VER
  • • 用来在编译器里判断 MSVC 的版本。

  • • 高两位一般对应大版本号,低两位对应小版本更新。

  • • 例如 _MSC_VER = 1929 → MSVC 14.29 (VS2019 最新更新)。

_MSC_VER 宏值为索引的 VS / VC++ / Toolset 对照速查表,你只要看到 _MSC_VER 的值,就能知道对应的 Visual Studio 版本VC++ 版本MSVC Toolset

_MSC_VER → VS / VC++ / MSVC Toolset 对照表

_MSC_VER

Visual Studio 版本

VC++ 版本

MSVC Toolset (vxxx)

备注

1200

VS 6.0 (1998)

VC++ 6.0

-

经典版本

1300

VS .NET 2002

VC++ 7.0

-

1310

VS .NET 2003

VC++ 7.1

-

1400

VS 2005

VC++ 8.0

-

1500

VS 2008

VC++ 9.0

-

1600

VS 2010

VC++ 10.0

-

1700

VS 2012

VC++ 11.0

-

1800

VS 2013

VC++ 12.0

-

1900

VS 2015

VC++ 14.0

v140

从此 VC 内部版本固定 14.x

1910

VS 2017 (15.0)

VC++ 14.1

v141 (14.10)

1911

VS 2017 (15.3)

VC++ 14.1

v141 (14.11)

1912

VS 2017 (15.5)

VC++ 14.1

v141 (14.12)

1913

VS 2017 (15.6)

VC++ 14.1

v141 (14.13)

1914

VS 2017 (15.7–15.8)

VC++ 14.1

v141 (14.14)

1915

VS 2017 (15.9)

VC++ 14.1

v141 (14.15)

LTS 版本

1916

VS 2017 (15.9 更新)

VC++ 14.1

v141 (14.16)

1920

VS 2019 (16.0)

VC++ 14.2

v142 (14.20)

1921

VS 2019 (16.1)

VC++ 14.2

v142 (14.21)

1922

VS 2019 (16.2)

VC++ 14.2

v142 (14.22)

1923

VS 2019 (16.3)

VC++ 14.2

v142 (14.23)

1924

VS 2019 (16.4)

VC++ 14.2

v142 (14.24)

1925

VS 2019 (16.5)

VC++ 14.2

v142 (14.25)

1926

VS 2019 (16.6)

VC++ 14.2

v142 (14.26)

1927

VS 2019 (16.7)

VC++ 14.2

v142 (14.27)

1928

VS 2019 (16.8–16.9)

VC++ 14.2

v142 (14.28)

1929

VS 2019 (16.10–16.11)

VC++ 14.2

v142 (14.29)

VS2019 最终版

1930

VS 2022 (17.0)

VC++ 14.3

v143 (14.30)

1931

VS 2022 (17.1)

VC++ 14.3

v143 (14.31)

1932

VS 2022 (17.2)

VC++ 14.3

v143 (14.32)

1933

VS 2022 (17.3)

VC++ 14.3

v143 (14.33)

1934

VS 2022 (17.4)

VC++ 14.3

v143 (14.34)

1935

VS 2022 (17.5)

VC++ 14.3

v143 (14.35)

1936

VS 2022 (17.6)

VC++ 14.3

v143 (14.36)

1937

VS 2022 (17.7)

VC++ 14.3

v143 (14.37)

1938

VS 2022 (17.8)

VC++ 14.3

v143 (14.38)

1939

VS 2022 (17.9)

VC++ 14.3

v143 (14.39)

1940+

VS 2022 (17.10+)

VC++ 14.4

v144 (未来版本)

预留

✅ 你只要看到 _MSC_VER=1928,就知道是 VS2019 (16.8/16.9),MSVC 14.28,Toolset v142

一个 反向速查表 —— 以 Visual Studio 版本 为索引,列出对应的 _MSC_VER 范围、VC 内部版本号、Toolset 版本:

VS 版本 → _MSC_VER 范围速查表

Visual Studio 版本

VC++ 内部版本

Toolset (vxxx)

_MSC_VER

范围

VS 6.0 (1998)

VC++ 6.0

-

1200

VS .NET 2002

VC++ 7.0

-

1300

VS .NET 2003

VC++ 7.1

-

1310

VS 2005

VC++ 8.0

-

1400

VS 2008

VC++ 9.0

-

1500

VS 2010

VC++ 10.0

-

1600

VS 2012

VC++ 11.0

-

1700

VS 2013

VC++ 12.0

-

1800

VS 2015

VC++ 14.0

v140

1900

VS 2017 (15.x)

VC++ 14.1x

v141 (14.10–14.16)

1910 ~ 1916

VS 2019 (16.x)

VC++ 14.2x

v142 (14.20–14.29)

1920 ~ 1929

VS 2022 (17.x)

VC++ 14.3x

v143 (14.30–14.39+)

1930 ~ 1939+

补充说明:

  • • 从 VS2015 开始,VC++ 内部版本固定为 14.x,不再随 VS 大版本递增,而是通过 小版本 (14.1, 14.2, 14.3 …) 来表示。

  • Toolset 版本号 (v140, v141, v142, v143 …) 在 CMake 或项目配置里使用,用来匹配 _MSC_VER

  • _MSC_VER 规则大致是:

  • • 1900 → VS2015

  • • 191x → VS2017

  • • 192x → VS2019

  • • 193x → VS2022

备注

以 Visual Studio 2022 为例,版本信息包括:

  • • Visual Studio 发布年份(营销版本号),例如 Visual Studio 2022

  • • Visual Studio 的实际版本号,例如 Visual Studio 17.0

  • • Visual C++(MSVC)版本,例如 MSVC 14.30

  • • 工具集(Toolset)版本,例如 toolset 143

  • • 编译器版本,例如 cl.exe 19.30

Visual Studio 版本

大多数人首先看到的是 Visual Studio 的发布年份,因为 Microsoft 官方就是这么宣传的。例如你可以在官网下载页面看到 Visual Studio 2022、Visual Studio 2019 等等。

但其实 Visual Studio 的版本也有一个更加普遍的 major.minor 版本控制方案,主版本号会在每个发布年份递增。例如 VS 2010 是版本 10,VS 2017 是版本 15,VS 2019 是版本 16,VS 2022 是版本 17。所以,如果客户跟你说:“我用的是 15 版本”,那就意味着它是 Visual Studio 2017。

请注意,Visual Studio 版本的年份和主要版本之间没有任何关联,只是 Visual Studio 2010 恰好也是版本 10。

当然,除了主版本号,Visual Studio 还有次版本号。下表列出了目前主要版本的对应关系。

发布年份

实际版本号

Visual Studio 2017

15.0

15.3

Visual Studio 2019

16.0

16.1

Visual Studio 2022

17.0

17.1

Visual C++ 版本

Microsoft Visual C++,又名 MSVC,虽然它作为 Visual Studio 的一部分跟随 Visual Studio 一同发布,但它也有自己的版本控制方案。值得一提的是,MSVC 的主版本号表示 ABI 兼容性,这意味着使用同一主版本号 MSVC 编译的东西可以与使用相同主版本号的任意其他 MSVC 编译的东西链接(有一些限制)。

幸运的是,MSVC 的主要版本号比 Visual Studio 版本本身更少被调整。到 Visual Studio 2022 为止,微软官方都将 MSVC 的主要版本保持在了 14,而次要版本的第一个数字似乎在每个主要版本的 Visual Studio 中都有所改变。

下表列出了 Visual Studio 和 MSVC 版本的对应关系。

发布年份

实际版本号

MSVC 版本

Visual Studio 2017

15.0

14.1

15.3

14.11

Visual Studio 2019

16.0

14.20

16.1

14.21

Visual Studio 2022

17.0

14.30

17.1

14.31

链接器(link.exe)也使用 Visual C++ 版本号作为它的版本号。例如 Visual C++ 14.32,你可能会看到 link.exe 版本号为 14.32.31332.0

C++ 工具集版本

与 MSVC 版本号密切相关的是 C++ 工具集(toolset)版本号。从微软官方的文章来看,工具集版本似乎是由 MSVC 主要版本和 MSVC 次要版本的第一位数字组成。

我整理到下面表格,方便你能看出来它们之间的关系。

发布年份

实际版本号

MSVC 版本

工具集版本

Visual Studio 2017

15.0

14.1

141

15.3

14.11

141

Visual Studio 2019

16.0

14.20

142

16.1

14.21

142

Visual Studio 2022

17.0

14.30

143

17.1

14.31

143

编译器版本

最后是编译器的版本,在这里特指 cl.exe 的版本,例如 19.16.27048。并且这个 major.minor 版本号与 _MSC_VER 宏定义相关联,这意味着你可以在源代码中检查它。例如,cl.exe 版本 19.21 对应的 _MSC_VER 宏为 1921。

你可以通过下面代码获取当前所使用的 Visual Studio 编译器的版本:

#include <iostream>int main(){     std::cout << "Version: " << _MSC_VER << std::endl;    return 0;}

下表列出了 Visual Studio、MSVC、工具集以及编译器版本的对应关系。

发布年份

实际版本号

MSVC 版本

工具集版本

编译器版本

Visual Studio 2017

15.0

14.1

141

19.10

15.3

14.11

141

19.11

Visual Studio 2019

16.0

14.20

142

19.20

16.1

14.21

142

19.21

Visual Studio 2022

17.0

14.30

143

19.30

17.1

14.31

143

19.31

基于此关系,你可以在源代码中通过 _MSC_VER 宏来区分不同版本,例如只有在足够新的 Visual Studio 编译环境下才编译某些东西,例如 #if _MSC_VER >= 1930

参考下面示例代码:

#include <iostream>int main(){ #if _MSC_VER >= 1930    std::cout << "Visual Studio 2022" << std::endl;#elif _MSC_VER >= 1920    std::cout << "Visual Studio 2019" << std::endl;#elif _MSC_VER >= 1910    std::cout << "Visual Studio 2017" << std::endl;#elif _MSC_VER >= 1900    std::cout << "Visual Studio 2015" << std::endl;#elif _MSC_VER >= 1800    std::cout << "Visual Studio 2013" << std::endl;#elif _MSC_VER >= 1700    std::cout << "Visual Studio 2012" << std::endl;#elif _MSC_VER >= 1600    std::cout << "Visual Studio 2010" << std::endl;#else    std::cout << "Unknown Version" << std::endl;#endif    return 0;}

小结

本文介绍了 Windows 集成开发环境 Visual Studio 令人混淆的版本号关系,横向对比了 MSVC、工具集以及编译器的版本号,并通过示例演示了如何在源代码中判断当前版本。希望对你有所帮助!