_MSC_VER

_MSC_VER

_MSC_VER是微軟公司推出的C/C++編譯器在ANSI/ISO C99標準之外擴展的宏定義,用來定義當前微軟公司自己的編譯器的主版本。需要注意的是,這並不是Visual Studio 的版本號,也不是Visual C++的版本號。如Visual Studio 2005的Vistual C++版本為8.0,所附帶編譯器的_MSC_VER定義是1400;目前最新的Visual Studio 2015的Visual C++版本為14.0,相應_MSC_VER為1900。

編譯器

_MSC_VER 定義編譯器的版本。下面是一些編譯器版本的_MSC_VER值(參見擴展閱讀中的參考文獻2的連結)

MS VC++ 15.0 _MSC_VER = 1910 (Visual Studio 2017)

MS VC++ 14.0 _MSC_VER = 1900 (Visual Studio 2015)

MS VC++ 12.0 _MSC_VER = 1800 (VisualStudio 2013)

MS VC++ 11.0 _MSC_VER = 1700 (VisualStudio 2012)

MS VC++ 10.0 _MSC_VER = 1600(VisualStudio 2010)

MS VC++ 9.0 _MSC_VER = 1500(VisualStudio 2008)

MS VC++ 8.0 _MSC_VER = 1400(VisualStudio 2005)

MS VC++ 7.1 _MSC_VER = 1310(VisualStudio 2003)

MS VC++ 7.0 _MSC_VER = 1300(VisualStudio .NET)

MS VC++ 6.0 _MSC_VER = 1200(VisualStudio 98)

MS VC++ 5.0 _MSC_VER = 1100(VisualStudio 97)

其中MS VC++ 14.0表示Visual C++的版本為14.0,後面括弧中的Visual Studio 2015,表明該VC++包含在微軟開發工具Visual Studio 2015中。

另外,可以通過當前使用的MS VC++編譯器的版本信息來推斷當前編譯器預定義的 _MSC_VER 值。_MSC_VER 的值是由 MS VC++編譯器的主版本號和次版本號構成的,其中主版本號是以“.”分割的版本號信息中的第一部分,而次版本號為其中的第二部分。例如,假設當前那使用的Visual C ++編譯器的版本號是15.00.20706.01(MS VC++ 2008),那么其主版本號就是為“15”,而次版本號就是為“00”,因此當前編譯器預定義的 _MSC_VER 宏的值就為1500。

關於編譯器版本號的查看,需要說名的是:這裡的版本號並不是指在“Microsoft Visual Studio——Help——About”里的“Version”的值,這個版本號是指Visual Studio的版本號,而不是VC++編譯器的版本號,VC++編譯器在Visual Studio裡面是指“cl.exe”程式,該程式才是編譯C++代碼的真正編譯器,如查看“cl.exe”的版本號,以在WIndows 7查看VC 2005的“cl.exe”的版本號為例,“開始——所有程式——Microsoft Visual Studio 2005——Visual Studio Tools——Visual Studio 2005 Command Prompt”進入VC++ 2005命令行,運行“ cl /?”,將會看到如下的信息:

Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 14.00.50727.762 for 80x86

Copyright (C) Microsoft Corporation. All rights reserved.

vc++ command line vc++ command line
cl.exe version cl.exe version

其中的“14.00.50727.762”就是版本號,對應的的_MSC_VER的值就是1400(14.00.50727.762的四部分依次為:主版本號、次版本號、生成版本號和修訂號,其中還有兩個相關宏_MSC_FULL_VER:值為140050727,_MSC_BUILD:值為762)。

編譯程式

在程式中加入_MSC_VER宏可以根據編譯器版本讓編譯器選擇性地編譯一段程式。例如一個版本編譯器產生的lib檔案可能不能被另一個版本的編譯器調用,那么在開發應用程式的時候,在該程式的lib調用庫中放入多個版本編譯器產生的lib檔案。在程式中加入_MSC_VER宏,編譯器就能夠在調用的時根據其版本自動選擇可以連結的lib庫版本,如下所示。

#if _MSC_VER >= 1400 // for vc8, or vc9

#ifdef _DEBUG

#pragma comment( lib, "SomeLib-vc8-d.lib" )

#elif

#pragma comment( lib, "SomeLib-vc8-r.lib" )

#endif

#elif _MSC_VER >= 1310 // for vc71

#ifdef _DEBUG

#pragma comment( lib, "SomeLib-vc71-d.lib" )

#elif

#pragma comment( lib, "SomeLib-vc71-r.lib" )

#endif

#elif _MSC_VER >=1200 // for vc6

#ifdef _DEBUG

#pragma comment( lib, "SomeLib-vc6-d.lib" )

#elif

#pragma comment( lib, "SomeLib-vc6-r.lib" )

#endif

#endif

本編輯詞條參考自擴展閱讀中的連結。關於_MSC_VER更詳細的說明請點擊閱讀擴展閱讀中的參考文獻3,4的連結。

熱門詞條

聯絡我們