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。
開發者 | 微軟公司 |
---|---|
首次發佈 | 1993年2月[1] |
目前版本 | 14.32.31326(2022年5月10日 | )
作業系統 | Microsoft Windows |
平台 | x86、x86-64、Itanium |
語言 | 英語、法語、德語、西班牙語、俄語、意大利語、韓語、日語、漢語(另有捷克語、葡萄牙語(巴西)、波蘭語、土耳其語僅提供語言套件)[2] |
類型 | 整合式開發環境 |
許可協定 | 微軟的終端使用者授權合約 |
網站 | learn |
風格
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++編譯器有一個內建的宏_MSC_VER
來表示編譯器的目前版本。[3]
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++前端.[4] | ||||||
MS C/C++ 7.0 | 1992年 | 700 | 1.0 | 0x0100 | 內建支援C++與MFC 1.0.[5] | ||||
Visual C++ 1.0 | Caviar | 1993年2月22日 | 1.0 | 800 | 2.0 | 0x0200 | Cfront 2.1 相容[6]。IDE稱「Visual Workbench」。有兩個版本:[1] | ||
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 支援.[8] 是首款僅用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[9] 1993年7月發佈時,已經有了16位元的VC++ 1.5,但這個版本不支援OLE2與ODBC. 套裝叫做Visual C++ 16/32-bit Suite, 其中包含了Visual C++ 1.5.[10] | ||||||||
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設計的。[11],引入了Developer Studio IDE,[12]用戶可以通過微軟公司的訂閱服務(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的版本號相同.[13] | ||
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版以來比較大的一次升級。[14]包含了四個版本: |
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。發行至今一直被廣泛地用於大大小小的項目開發。[19]但是,這個版本在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作業系統。[20]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格式的資料庫來儲存原始碼的相關資訊[21].本版也加入了現代化的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開發。[22]從該版本起,編譯出的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。[23]
|
Visual C++ 2015 | Dev14 | 2015年7月20日 | 14.0 | 1900 | 14.0 | 0x0E00 | 14.0 | 0x0E00 | 改進了對C++11/14支援。[24][25] |
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[26] |
Visual C++ 2019 | Dev16 | 2019年4月2日 | 14.20 | 1920 | 14.20 | 0x0E00 | 14.20 | 0x0E00 | 開始支援C++20[27] |
語言標準支援
C99
在Visual C++ 2012以前,完全不支援C99與C11的新特性,僅支援1989年版的ANSI C。[28]Visual C++ 2012開始在C模式下支援C99的部分特性,如designated initializers、compound literals、_Bool
類型。Visual C++ 2013很大改進了對C99特性的支援。[29] Visual C++ 2015基本上完整支援了C99標準庫,但需要編譯器尚未支援的C99語言特性的那部分標準庫除外。[30]
C++
至VC++2017 Version 15.7已經完全實現了C++17
詳細情況見[31]
工具鏈生態環境
- 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 中找到[32]。
編譯時,根據專案是除錯版還是發佈版,動態還是靜態連結執行時庫,編譯器可自動使用預設庫。如果使用編譯選項/nodefaultlib,需要顯式指定使用的庫。對於VC++2015,所有下述庫均為多線程:[33]
情形 | 編譯選項 | 預處理directives | CRT初始化庫 (均為靜態連結) |
vcruntime庫 | vcruntime DLL | Universal CRT | UCRT DLL | Standard C++庫 |
---|---|---|---|---|---|---|---|---|
Release DLLs | /MD | _MT, _DLL | msvcrt.lib | vcruntime.lib | vcruntime<version>.dll | ucrt.lib | ucrtbase.dll | MSVCPRT.LIB 是MSVCP<version>.dll的輸入庫 |
Debug DLLs | /MDd | _DEBUG, _MT, _DLL | msvcrtd.lib | vcruntimed.lib | vcruntime<version>d.dll | ucrtd.lib | ucrtbased.dll | MSVCPRTD.LIB 是MSVCP<version>D.dll的輸入庫 |
Release Static | /MT | _MT | libcmt.lib | libvcruntime.lib | None | libucrt.lib | None | LIBCPMT.LIB |
Debug Static | /MTd | _DEBUG, _MT | libcmtd.lib | libvcruntimed.lib | None | libucrtd.lib | None | 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++執行時庫。官方下載網址見[34]。
Visual C++ Build tools
Microsoft C++ Build Tools是一套MSVC工具集,通過可指令碼化、單獨安裝器,而不需要Visual Studio。如果你通過命令列方式開發程式可以使用這套工具。
歷史版本支援
從2021年4月26日開始,Visual Studio 2015和更老版本的web安裝器檔案被從Microsoft Download Center刪除。[35] 這些古老的產品可從 「Downloads - Visual Studio Subscriptions Portal」下載後用ISO images安裝。
參見
參考文獻
- ^ 1.0 1.1 Visual C++ adds Windows support. InfoWorld. 1993-02-22: 17.
- ^ Microsoft Visual Studio 2012下載頁面. [2017-04-13]. (原始內容存檔於2013-11-12).
- ^ Pre-defined Compiler Macros / Wiki / Compilers. sourceforge.net. [2016-02-11]. (原始內容存檔於2020-11-11).
- ^ Ladd, Scott Robert. Optimizing With Microsoft C 6.0. 1990-08-01 [2016-11-28]. (原始內容存檔於2017-03-20).
- ^ Retrieved from http://support.microsoft.com/kb/196831 (頁面存檔備份,存於互聯網檔案館).
- ^ 6.0 6.1 Visual C++ is a strong development tool. InfoWorld. 1993-06-21: 94 [2017-04-13]. (原始內容存檔於2020-08-05).
- ^ Rival DOS Extenders debut at show. InfoWorld. 1993-03-01: 18.
- ^ Visual C++ 1.5 integrates OLE, ODBC. InfoWorld. 1993-11-08: 5 [2017-04-13]. (原始內容存檔於2020-08-05).
- ^ Microsoft set to prerelease 32-bit Visual C++. InfoWorld. 1993-07-19: 12.
- ^ C++ IDEs evolve. InfoWorld. 1994-04-04: 79.
- ^ Obsolete Products. [2017-04-13]. (原始內容存檔於2005-08-14).
- ^ Toth, Viktor. 1. Visual C++ 4.0 unleashed. Indianapolis: SAMS Publishing. 1996 [2013-07-26]. ISBN 9780672308741. (原始內容存檔於2019-08-11).
- ^ History of Visual Studio (Part 3). [2017-04-13]. (原始內容存檔於2009-10-11).
- ^ Major Changes from Visual C++ 4.2 to 5.0. [2017-04-13]. (原始內容存檔於2015-08-28).
- ^ Microsoft Visual C++ 5.0 Learning Edition. [2017-04-13]. (原始內容存檔於1999-04-27).
- ^ Microsoft Visual C++ 5.0 Professional Edition. [2017-04-13]. (原始內容存檔於1999-04-27).
- ^ Microsoft Visual C++ 5.0 Enterprise Edition. [2017-04-13]. (原始內容存檔於1999-04-17).
- ^ Microsoft Visual C++ 5.0 RISC Edition. [2017-04-13]. (原始內容存檔於1999-04-29).
- ^ Major Changes from Visual C++ 5.0 to 6.0. [2017-04-13]. (原始內容存檔於2008-09-14).
- ^ Douglas Boling :Programming Microsoft Windows CE .NET, Third Edition Microsoft Press; 3rd edition (June 25, 2003) Paperback: 1264 pages ISBN 978-0735618848 - Companion CD with Microsoft eMbedded Visual C++ 4.0 Service Pack 2 Archive.is的存檔,存檔日期2013-02-11
- ^ Visual C++ Team Blog. IntelliSense, part 2: The Future. [2008-03-12]. (原始內容存檔於2010-03-11).
- ^ What's New for Visual C++ in Visual Studio 2012. Microsoft Developer Network. Microsoft. [2015-09-20]. (原始內容存檔於2015-09-23).
- ^ What's New for Visual C++ in Visual Studio 2013. Microsoft Developer Network. Miicrosoft. [2015-09-20]. (原始內容存檔於2015-05-23).
- ^ Stephan T. Lavavej. C++11/14/17 Features In VS 2015 RTM. Visual C++ Team Blog. Microsoft. 2015-06-19 [2017-04-13]. (原始內容存檔於2015-06-20).
- ^ Eric Battalio. Visual Studio 2015 RTM Now Available. Visual C++ Team Blog. Microsoft. 2015-07-20 [2017-04-13]. (原始內容存檔於2015-07-22).
- ^ John. Visual Studio 2017: Productivity, Performance, and Partners. Visual Studio Blog. Microsoft. 2017-03-07 [2020-08-14]. (原始內容存檔於2020-09-19).
- ^ John. Visual Studio 2019: Code faster. Work smarter. Create the future.. Visual Studio Blog. Microsoft. 2019-04-02 [2020-08-14]. (原始內容存檔於2021-01-29) (美國英語).
- ^ C99 support. Microsoft Connect. [2017-04-13]. (原始內容存檔於2016-03-04).
- ^ Pat Brenner. C99 library support in Visual Studio 2013. Visual C++ Team Blog. Microsoft. 2013-07-19 [2017-04-13]. (原始內容存檔於2014-08-05).
- ^ What's New for Visual C++ in Visual Studio 2015. Microsoft Developer Network. Microsoft. [2017-04-13]. (原始內容存檔於2018-11-05).
- ^ MSDN: Visual C++ Language Conformance. [2018-11-14]. (原始內容存檔於2019-01-09).
- ^ C runtime (CRT) and C++ Standard Library (STL) .lib files. [2022-04-03]. (原始內容存檔於2021-11-23).
- ^ Visual C++ Team Blog: "Introducing the Universal CRT". [2017-03-22]. (原始內容存檔於2019-07-01).
- ^ MSDN: The latest supported Visual C++ downloads. [2018-11-14]. (原始內容存檔於2019-08-10).
- ^ MSDN:"UPDATE: SHA-1 signed content to be retired". [2022-08-09]. (原始內容存檔於2022-08-09).
外部連結
- (簡體中文)Visual Studio Express首頁 (頁面存檔備份,存於互聯網檔案館)
- (簡體中文)Visual Studio Express下載頁面 (頁面存檔備份,存於互聯網檔案館)
- (英文)微軟的Visual C++開發者中心 (頁面存檔備份,存於互聯網檔案館)
- (英文)微軟的Visual C++開發社區 (頁面存檔備份,存於互聯網檔案館)
- (英文)Building Win32 Applications Using Visual C++ 2005 Express (頁面存檔備份,存於互聯網檔案館)
- (英文)Visual C++ STL Templates Tutorial