https://www.cnblogs.com/zhcncn/archive/2013/05/21/3091052.html
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:Internet Explorer_百度百科)

#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:_MSC_VER_百度百科)
| 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
--------------------------
本文详细介绍了Windows系统中的版本宏/_WIN32_WINDOWS、_WIN32_WINNT、WINVER以及IE浏览器版本宏/_WIN32_IE的用法和对应版本值。这些宏用于设定最低系统需求,并根据不同的Windows和IE版本进行条件编译。同时,文章提到了_MSC_VER宏,用于标识Visual Studio编译器的版本。
483

被折叠的 条评论
为什么被折叠?



