Windows中一些宏的含义

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 
WINVER>=0x0602

Win7

_WIN32_WINNT>=0x0601 
WINVER>=0x0601

Windows Server 2008 R2

_WIN32_WINNT>=0x0601 
WINVER>=0x0601

Windows Server 2008

_WIN32_WINNT>=0x0600 
WINVER>=0x0600

Windows Vista

_WIN32_WINNT>=0x0600 
WINVER>=0x0600

Windows Server 2003

_WIN32_WINNT>=0x0502 
WINVER>=0x0502

Windows XP

_WIN32_WINNT>=0x0501 
WINVER>=0x0501

Windows 2000

_WIN32_WINNT>=0x0500 
WINVER>=0x0500

Windows NT 4.0

_WIN32_WINNT>=0x0400 
WINVER>=0x0400

Windows Me

_WIN32_WINDOWS=0x0500 
WINVER>=0x0500

Windows 98

_WIN32_WINDOWS>=0x0410 
WINVER>=0x0410

Windows 95

_WIN32_WINDOWS>=0x0400 
WINVER>=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

 

 

 

 

posted @ 2013-05-21 16:56  金石开  阅读(15103)  评论(0编辑  收藏