1. _WIN32_WINDOWS,_WIN32_WINNT,WINVER
這三個宏其實都是Windows的版本宏,在Windows 95,98,Me這一分支的OS中,Windows的定義的版本宏是_WIN32_WINDOWS。與此同時,Windows重新開發了NT系列,且其編號從NT4.0開始,經過Windows 2000,XP, Server 2003,Vista,Server2008,Win7,Win8. 在這一分支中,Windows的定義的版本宏是_WIN32_WINNT。_WIN32_WINDOWS宏便被廢棄了。
WINVER是_WIN32_WINDOWS或_WIN32_WINNT的別名。在SDK的sdkddkver.h中有其定義,可見WINVER<=>_WIN32_WINNT宏的值。
#ifndef WINVER #ifdef _WIN32_WINNT // set WINVER based on _WIN32_WINNT #define WINVER _WIN32_WINNT #else #define WINVER 0x0601 #endif #endif
Window各個版本對應的宏值
| Minimum system required |
Macros to define |
| Win8 |
_WIN32_WINNT>=0x0602 |
| Win7 |
_WIN32_WINNT>=0x0601 |
| Windows Server 2008 R2 |
_WIN32_WINNT>=0x0601 |
| Windows Server 2008 |
_WIN32_WINNT>=0x0600 |
| Windows Vista |
_WIN32_WINNT>=0x0600 |
| Windows Server 2003 |
_WIN32_WINNT>=0x0502 |
| Windows XP |
_WIN32_WINNT>=0x0501 |
| Windows 2000 |
_WIN32_WINNT>=0x0500 |
| Windows NT 4.0 |
_WIN32_WINNT>=0x0400 |
| Windows Me |
_WIN32_WINDOWS=0x0500 |
| Windows 98 |
_WIN32_WINDOWS>=0x0410 |
| Windows 95 |
_WIN32_WINDOWS>=0x0400 |
2. _WIN32_IE
Windows IE瀏覽器的版本宏。瀏覽器各個版本宏的值定義在sdkddkver.h中,
#define _WIN32_IE_IE20 0x0200 #define _WIN32_IE_IE30 0x0300 #define _WIN32_IE_IE302 0x0302 #define _WIN32_IE_IE40 0x0400 #define _WIN32_IE_IE401 0x0401 #define _WIN32_IE_IE50 0x0500 #define _WIN32_IE_IE501 0x0501 #define _WIN32_IE_IE55 0x0550 #define _WIN32_IE_IE60 0x0600 #define _WIN32_IE_IE60SP1 0x0601 #define _WIN32_IE_IE60SP2 0x0603 #define _WIN32_IE_IE70 0x0700 #define _WIN32_IE_IE80 0x0800
在sdkddkver.h中也可以看到,不同的Windows版本,所支持的IE瀏覽器版本是不同的。從以下的代碼可以看到,Windows XP之前的系統,只支持IE到IE6. 從Windows XP之后,所有的Windows版本都支持IE支持到IE8. IE9不再支持Windows XP(包括Server 2003)。IE10則不再支持Vista。(refer to: http://baike.baidu.com/view/85144.htm?fromId=703)
#ifndef _WIN32_IE #ifdef _WIN32_WINNT // set _WIN32_IE based on _WIN32_WINNT #if (_WIN32_WINNT <= _WIN32_WINNT_NT4) #define _WIN32_IE _WIN32_IE_IE50 #elif (_WIN32_WINNT <= _WIN32_WINNT_WIN2K) #define _WIN32_IE _WIN32_IE_IE501 #elif (_WIN32_WINNT <= _WIN32_WINNT_WINXP) #define _WIN32_IE _WIN32_IE_IE60 #elif (_WIN32_WINNT <= _WIN32_WINNT_WS03) #define _WIN32_IE 0x0602 #else #define _WIN32_IE 0x0800 #endif #else #define _WIN32_IE 0x0800 #endif #endif
3. _MSC_VER
_MSC_VER 定義編譯器的版本。程序中加入_MSC_VER宏可以根據編譯器版本讓編譯器選擇性地編譯一段程序。(refer to: http://baike.baidu.com/view/1276757.htm)
| Visual Studio |
Visual C++ Version |
_MSC_VER Value |
| Visual C++ 2010 |
VC++ 10.0 |
1600 |
| Visual C++ 2008 |
VC++ 9.0 |
1500 |
| Visual C++ 2005 |
VC++ 8.0 |
1400 |
| Visual C++ 2003 |
VC++ 7.1 |
1310 |
| Visual C++ 2003 |
VC++ 7.0 |
1300 |
| Visual C++ 6.0 |
VC++ 6.0 |
1200 |
|
|
VC++ 5.0 |
1100 |
4. _WIN32
32 bit Plarform: #ifdef _WIN32
5. _Win64
64 bit Plarform: #ifdef _WIN64
6. _WINDOWS
如果定義了該宏,表明它是一個GUI Application:#ifdef _WINDOWS
7. _CONSOLE
如果定義了該宏,表明它是一個GUI Application:#ifdef _CONSOLE
--------------------------
參考:
條件編譯小結(http://blog.csdn.net/immcss/article/details/3881827)
