1. 程式人生 > >如何確定VS編譯器版本--_MSC_VER

如何確定VS編譯器版本--_MSC_VER

如何確定VS編譯器版本

_MSC_VER是MSVC編譯器的內建巨集,定義了編譯器的版本,_MSC_VER 值對應版本關係

MSVC++ 11.0 _MSC_VER = 1700 (Visual Studio 2012) 
MSVC++ 10.0 _MSC_VER = 1600 (Visual Studio 2010)
MSVC++ 9.0 _MSC_VER = 1500  (Visual Studio 2008) 
MSVC++ 8.0 _MSC_VER = 1400  (Visual Studio 2005) 
MSVC++ 7.1 _MSC_VER = 1310  (Visual Studio 2003)
MSVC++ 7.0 _MSC_VER = 1300 (Visual Studio 2002)
MSVC++ 6.0 _MSC_VER = 1200 
MSVC++ 5.0 _MSC_VER = 1100

 
example:

#if (_MSC_VER == 1300)  //vc7
#import "acax16ENU.tlb" no_implementation raw_interfaces_only named_guids
#elif (_MSC_VER == 1200)  //vc6
#import "acad.tlb" no_implementation raw_interfaces_only named_guids
#elif (_MSC_VER == 1400) //vc8
#import "acax17ENU.tlb" no_implementation raw_interfaces_only named_guids
#elif (_MSC_VER == 1500) //vc9
#import "acax18ENU.tlb" no_implementation raw_interfaces_only named_guids
#endif


在程式中加入_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" )
#else if
#pragma comment( lib, "SomeLib-vc8-r.lib" )
#endif
#else if _MSC_VER >= 1310 // for vc71
#ifdef _DEBUG
#pragma comment( lib, "SomeLib-vc71-d.lib" )
#else if
#pragma comment( lib, "SomeLib-vc71-r.lib" )
#endif
#else if _MSC_VER >=1200 // for vc6
#ifdef _DEBUG
#pragma comment( lib, "SomeLib-vc6-d.lib" )
#else if
#pragma comment( lib, "SomeLib-vc6-r.lib" )
#endif
#endif