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
- 語言：英語、法語、德語、西班牙語、俄語、義大利語、韓語、日語、漢語（另有捷克語、葡萄牙語（巴西）、波蘭語、土耳其語僅提供語言包）
- 類型：集成開發環境
- 許可協議：微軟的最終使用者許可協議