Microsoft Visual C++

Microsoft Visual C++（简称Visual C++、MSVC、VC++或VC）是微软公司的C++开发工具，具有集成开发环境，可提供编辑C语言，C++以及C++/CLI等编程语言。VC++整合了便利的除错工具，特别是整合了微软Windows操作系统应用程序接口（Windows API）、三维动画DirectX API，微软.NET框架。目前最新的版本是Microsoft Visual C++ 2022。

## 风格

Visual C++以拥有语法高亮、IntelliSense（智能提示）以及高级调试功能而著称。比如，它允许用户进行远程调试，单步执行等。还有允许用户在调试期间重新编译被修改的代码，而不必重新启动正在调试的程序。其编译及创建预编译头文件（`stdafx.h`）、最小重建功能及累加连结（link）著称。这些特征明显缩短程式编辑、编译及连结的时间花费，在大型软件计划上尤其显著。

## 发行版本

Visual C++被整合在Visual Studio之中，但仍可单独安装使用。

通常细分为多个发行版本。以Visual C++ 2013为例：

- Visual C++ 2013 Community社群版(功能同专业版)(非商业免费)
- Visual C++ 2013 Express速成版
- Visual C++ 2013 Professional专业版
- Visual C++ 2013 Premium高级版
- Visual C++ 2013 Ultimate旗舰版

其中Microsoft Visual C++ 2013 Express可从MSDN的网站免费下载使用，并且不限制商业使用（但不包含MFC）。

## 历史

微软的C/C++编译器有一个内置的宏

```c++
_MSC_VER
```

来表示编译器的当前版本。

Visual C++的前身是Microsoft C/C++。还有相关产品：Microsoft QuickC 2.5 与Microsoft Quick C for Windows 1.0. Visual C++ 编译器仍然叫做Microsoft C/C++。例如Visual C++ 2015 Update 2的版本号是19.00.23918.

产品｜Codename｜发布日期｜C++版本｜_MSC_VER｜MFC版本｜_MFC_VER｜ATL版本｜_ATL_VER｜注释

16-bit版本

MSC 1.0｜1983年10月｜100｜基于Lattice C, Microsoft的第一款C产品。遵循K&R C语言标准。售价500美元。

MSC 2.0｜200｜增加了large model支持

MSC 3.0｜1985年｜300｜第一款Microsoft自己开发的C产品. 目标是兼容K&R与ANSI标准。1984年初微软用它开发了Windows与Xenix。

MSC 4.0｜400｜增加了优化器与源级调试器CodeView

MSC 5.0｜500｜增加了循环优化与Huge Model (数组大于64k)支持。Microsoft Fortran与80386上第一款32位编译器也是此计划的一部分。

Microsoft C 5.1 Optimizing Compiler｜1988年｜允许OS/2 1.x编译

MSC 6.0｜1989年｜600｜增加了全局流分析、源浏览器、新调试器、可选的C++前端.

MS C/C++ 7.0｜1992年｜700｜1.0｜0x0100｜内建支持C++与MFC 1.0.

Visual C++ 1.0｜Caviar｜1993年2月22日｜1.0｜800｜2.0｜0x0200｜Cfront 2.1 兼容。IDE称“Visual Workbench”。有两个版本: Standard – 替换“QuickC for Windows”。售价199美元。Professional – 替换 C/C++ 7.0. 可建构 DOS与Windows应用程序。包含了优化编译器、源profiler, Windows 3.1 SDK。以及Phar Lap 286 DOS Extender Lite售价499美元。

Visual C++ 1.1｜Barracuda｜1993｜1.1

Visual C++ 1.5｜Dolphin｜1993年12月｜1.5｜850｜2.5｜0x0250｜增加了OLE 2.0与ODBC 支持. 是首款仅用CD-ROM发布的Visual C++.这个版本-{只}支持16位开发。

Visual C++ 1.51｜1.5｜作为subscription service可利用

Visual C++ 1.52｜1.52｜作为subscription service可利用

Visual C++ 1.52b｜1.52b｜类似于1.52, 但不包括Control Development Kit

'Visual C++ 1.52c｜1.52c｜是1.5的加补丁版. 是最后一版，也是有争议的最为流行的Microsoft Windows 3.x开发平台. 可通过Microsoft Developer Network使用它

32-bit版本

Visual C++ 1.0｜最初称Visual C++ 32-bit Edition 1993年7月发布时，已经有了16位的VC++ 1.5，但这个版本不支持OLE2与ODBC. 套装叫做Visual C++ 16/32-bit Suite, 其中包含了Visual C++ 1.5.

Visual C++ 2.0｜2.0｜900｜3.0｜0x0300｜第一个只发行32位的版本。这个版本提前发行了，几乎成了一个“丢失的版本”。这是因为那个时候Windows 95（开发代码为"Chicago"）还没有发行，而Windows NT又只占有很小的市场份额。该版本用户可以通过微软公司的订阅服务（Microsoft Subscription Service）升级至2.1和2.2版本。微软公司在这个版本中还包含了升级后的Visual C++ 1.5：2.0版本中包含了Visual C++ 1.51；2.1版本包含了Visual C++ 1.52。Visual C++ 2.x附带了16位和32位版本的CDK，同时支持Win32s的开发。Visual C++ 2.2及其后续版本不再升级Visual C++ 1.5（尽管它一直被集成至Visual C++ 4.x）。尽管出生的比Windows 95早，这个版本的发行日期还是非常接近Windows 95，可是当Windows 95发行时，Visual C++ 4.0也已经发行了。因此很多程序开发者直接从1.x过渡到4.0，把2.x跳过去了。

Visual C++ 2.1｜2.1｜可通过订阅服务获得

Visual C++ 2.2｜2.2｜可通过订阅服务获得

Visual C++ 4.0｜Olympus｜1995-12-11｜4.0｜1000｜4.0｜0x0400｜为与MFC版本号对齐，跳过了VC++3.0版本号。专门为Windows 95以及Windows NT设计的。引入了Developer Studio IDE，用户可以通过微软公司的订阅服务（Microsoft Subscription Service）升级至4.1版本（包含Microsoft Game SDK）和4.2版本（此版本不再支持Win32s开发）。为支持老的(Windows 3.x/DOS)项目，还包含了Visual C++ 1.52安装光盘。VC++ 3.0版本号被跳过，以与MFC 4.0的版本号相同.

Visual C++ 4.2｜4.2｜1020｜4.2｜0x0420｜Developer Studio 4.2

Visual C++ 5.0｜Boston｜1997-04-28｜5.0｜1100｜4.21｜0x0421｜2.1｜0x0210｜Visual Studio 97是第一个集成了多个产品 (Visual C++, Visual Basic, Visual J++)。是4.2版以来比较大的一次升级。包含了四个版本： Learning版 Professional, Enterprise, RISC.

Visual C++ 6.0｜Aspen｜1998年8月｜6.0｜1200｜6.0｜0x0600｜3.0｜0x0300｜Visual Studio 6.0是惟一不用年份命名的Visual Studio。MFC DLL的名字没有改变，还是叫做mfc42.dll。发行至今一直被广泛地用于大大小小的项目开发。但是，这个版本在Windows XP下运行会出现问题，尤其是在调试模式的情况下（例如：静态变量的值并不会显示）。这个调试问题可以通过打一个叫“Visual C++ 6.0 Processor Pack”的补丁来解决。奇怪的是，这个网页强调用户也必须运行Windows 98、Windows NT 4.0、或Windows 2000。版本号12.00.8804

Visual C++ .NET 2002｜Rainier｜2002年｜7.0｜1300｜7.0｜0x0700｜7.0｜0x0700｜支持链接时代码生成和调试执行时检查。这个版本还集成了Managed Extension for C++，以及一个全新的用户界面（与Visual Basic和Visual C#共用）。这也是为什么Visual C++ 6.0仍然被广泛使用的一个主要原因。版本号13.00.9466

Visual C++ .NET 2003｜Everett｜2003年｜7.1｜1310｜7.1｜0x0710｜7.1｜0x0710｜类似于1.52, 但不包括Control Development Kit

eMbedded Visual C++｜用于Windows CE操作系统。Visual C++作为一个独立的开发环境被Microsoft Visual Studio 2005所替代。

32-bit/64-bit版本

Visual C++ 2005｜Whidbey｜2005年11月｜8.0｜1400｜8.0｜0x0800｜8.0｜0x0800｜引进了全新版本的C++/CLI语言以替换Managed C++，以及OpenMP的支持

Visual C++ 2008｜Orcas｜2007年11月｜9.0｜1500｜9.0｜0x0900｜9.0｜0x0900｜支持.NET 3.5。Visual Studio 2008 Team Suite更同时支援x64与IA-64编译

Visual C++ 2010｜Dev10｜2010年4月12日｜10.0｜1600｜10.0｜0x0A00｜10.0｜0x0A00｜Visual C++开发团队考虑使用SQL Server Compact格式的数据库来储存源码的相关资讯.本版也加入了现代化的C++并行运算库-Parallel Patterns Library，部分支援C++0x。本版建构于.NET 4.0之上，但仍支持机器码的编译。

Visual C++ 2012｜Dev11｜2012年8月15日｜11.0｜1700｜11.0｜0x0B00｜11.0｜0x0B00｜支持Windows Runtime开发。从该版本起，编译出的32位程序不能在Windows NT4.0 / 2000 / XP上运行，这是因为在程序内部使用了自Vista起出现在kernel32.dll中的GetTickCount64函数。解决办法是在编译project的platform set选择为“Visual Studio 2012 - Windows XP (v110_xp) ”。

Visual C++ 2013｜Dev12｜2013年10月17日｜12.0｜1800｜12.0｜0x0C00｜12.0｜0x0C00｜支持C++11与C99特性，并引入了REST SDK。RTM version number: 18.0.21005.1 Update 2 version number: 18.00.30501

Visual C++ 2015｜Dev14｜2015年7月20日｜14.0｜1900｜14.0｜0x0E00｜14.0｜0x0E00｜改进了对C++11/14支持。

Visual C++ 2017｜Dev15｜2017年3月7日｜14.10｜1910｜14.10｜0x0E00｜14.10｜0x0E00｜从此版本开始，MSVC++版本号与Visual Studio版本号不再同步，并且每个子版本都会递增 MSVC++ 14.0 _MSC_VER == 1900 (Visual Studio 2015 version 14.0)。开始支持C++17

Visual C++ 2019｜Dev16｜2019年4月2日｜14.20｜1920｜14.20｜0x0E00｜14.20｜0x0E00｜开始支持C++20

## 语言标准支持

### C99

在Visual C++ 2012以前，完全不支持C99与C11的新特性，仅支持1989年版的ANSI C。Visual C++ 2012开始在C模式下支持C99的部分特性，如designated initializers、compound literals、`_Bool`类型。Visual C++ 2013很大改进了对C99特性的支持。Visual C++ 2015基本上完整支持了C99标准库，但需要编译器尚未支持的C99语言特性的那部分标准库除外。

### C++

至VC++2017 Version 15.7已经完全实现了C++17

详细情况见

## 工具链生态环境

- Universal CRT (UCRT)包含了C99运行时库的函数与全局变量。UCRT现在是Windows component，随Windows 10安装。UCRT的静态库、DLL的导入库、头文件是Windows 10 SDK的一部分。
- vcruntime库包含Visual C++ CRT实现相关的代码，如异常处理、调试支持、运行时检查、类型信息、实现细节与特定扩展库函数。vcruntime库相关于特定编译器。
- CRT(C 运行时库)初始化库处理进程启动（CRT startup）、内部的逐线程的初始化、终止。CRT初始化库相关于特定编译器。CRT初始化库总是静态链接，即使使用了动态链接的UCRT。
- 对于本地代码与受管代码混合的情形，使用/clr编译选项，这会动态链接 UCRT与vcruntime，静态链接msvcmrt.lib或msvcmrtd.lib；msvcmrt.lib或msvcmrtd.lib提供了受管代码与本地CRT之间的proxy。对于纯受管代码情形，使用/clr:pure编译选项，这会静态链接msvcurt.lib或msvcurtd.lib。
- msvcmrt.lib、msvcmrtd.lib，用于 DLL UCRT 和 vcruntime 的混合本机和托管 CRT 启动的调试版本的静态库。不可再分发。
- UCRT现在是一个 Windows 组件，并作为 Windows 10 及更高版本的一部分提供。UCRT 的静态库、DLL 导入库和头文件现在可以在 Windows SDK 中找到。

编译时，根据项目是调试版还是发布版，动态还是静态链接运行时库，编译器可自动使用默认库。如果使用编译选项/nodefaultlib，需要显式指定使用的库。对于VC++2015，所有下述库均为多线程：

情形｜编译选项｜预处理directives｜CRT初始化库（均为静态链接）｜vcruntime库｜vcruntime DLL｜Universal CRT｜UCRT DLL｜Standard C++库

Release DLLs｜/MD｜_MT, _DLL｜msvcrt.lib｜vcruntime.lib｜vcruntime.dll｜ucrt.lib｜ucrtbase.dll｜MSVCPRT.LIB是MSVCP.dll的输入库

Debug DLLs｜/MDd｜_DEBUG, _MT, _DLL｜msvcrtd.lib｜vcruntimed.lib｜vcruntimed.dll｜ucrtd.lib｜ucrtbased.dll｜MSVCPRTD.LIB是MSVCPD.dll的输入库

Release Static｜/MT｜_MT｜libcmt.lib｜libvcruntime.lib｜libucrt.lib｜LIBCPMT.LIB

Debug Static｜/MTd｜_DEBUG, _MT｜libcmtd.lib｜libvcruntimed.lib｜libucrtd.lib｜LIBCPMTD.LIB

Mixed Release Static｜/clr｜_MT｜msvcmrt.lib

Mixed Debug Static｜/clr｜_MT｜msvcmrtd.lib

Pure Release Static(过时)｜/clr:pure｜_MT｜msvcurt.lib

Pure Debug Static(过时)｜/clr:pure｜_MT｜msvcurtd.lib

### Visual C++运行时库

Visual C++编译出的应用程序，其运行环境通常需要安装Visual C++运行时库。官方下载网址见。

### Visual C++ Build tools

Microsoft C++ Build Tools是一套MSVC工具集，通过可脚本化、单独安装器，而不需要Visual Studio。如果你通过命令行方式开发程序可以使用这套工具。

### 历史版本支持

从2021年4月26日开始，Visual Studio 2015和更老版本的web安装器文件被从Microsoft Download Center删除。

这些古老的产品可从 “ Downloads - Visual Studio Subscriptions Portal”下载后用ISO images安装。

## 外部链接

- Visual Studio Express首页
- Visual Studio Express下载页面
- 微软的Visual C++开发者中心
- 微软的Visual C++开发社区
- Building Win32 Applications Using Visual C++ 2005 Express
- Visual C++ STL Templates Tutorial

## 基本资料

- 日语原文：Visual C++
- 开发者：微软公司
- 发行日期：1993年
- 软件版本周期：14.50 (Build 11205.157)
- 软件版本周期：2025年11月11日
- 操作系统：Microsoft Windows
- 平台：x86、x86-64、Itanium
- 语言：英语、法语、德语、西班牙语、俄语、意大利语、韩语、日语、汉语（另有捷克语、葡萄牙语（巴西）、波兰语、土耳其语仅提供语言包）
- 类型：集成开发环境
- 许可协议：微软的最终用户许可协议