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
--------------------------