• 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

  • 相关阅读:
    Android Intent Service
    Android-Window(一)——初识Window
    立FLAG-书单
    Typecho-Material主题不支持Kotlin代码高亮的解决方案
    【翻译】What is State Machine Diagram(什么是状态机图)?
    【翻译】 What is class diagram(什么是类图)?
    Android-Selector不起作用
    git 命令
    远程分支回退方法
    mac 显示隐藏文件
  • 原文地址:https://www.cnblogs.com/zhcncn/p/3091052.html
Copyright © 2020-2023  润新知