=============================================================================================================================================================================================================================================================================================================================================================================================
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. VS 版本号
-
• VS 2015 之前,VC++ 的内部版本号和 VS 版本号是对应的(VC8.0、VC9.0…)。
-
• 从 VS 2015 开始,VC++ 内部版本号固定为 14.x,之后每次更新只是增加 小版本 (14.1x, 14.2x, 14.3x …)。
- 2. MSVC Toolset version (v140, v141, v142, v143)
-
• 这个版本号常出现在 项目配置 或 CMake 工具链里,代表使用的工具集。
-
• 对应关系是:
-
• VS2015 → v140
-
• VS2017 → v141
-
• VS2019 → v142
-
• VS2022 → v143
- 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.exe19.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、工具集以及编译器的版本号,并通过示例演示了如何在源代码中判断当前版本。希望对你有所帮助!