zoukankan      html  css  js  c++  java
  • 理解 LARGE_INTEGER的定义


    http://bbs.csdn.net/topics/310239341


    #if defined(MIDL_PASS)
    typedef struct _LARGE_INTEGER {
    #else // MIDL_PASS
    typedef union _LARGE_INTEGER {
        struct {
            DWORD LowPart;
            LONG HighPart;
        };
        struct {
            DWORD LowPart;
            LONG HighPart;
        } u;
    #endif //MIDL_PASS
        LONGLONG QuadPart;
    } LARGE_INTEGER;

    怎么理解这个定义  ?

    =============================================================================================

    #if defined(MIDL_PASS)
    typedef struct _LARGE_INTEGER {
    #else // MIDL_PASS
    typedef union _LARGE_INTEGER {
        struct {
            DWORD LowPart;
            LONG HighPart;
        };
        struct {
            DWORD LowPart;
            LONG HighPart;
        } u;
    #endif //MIDL_PASS

        LONGLONG QuadPart;
    } LARGE_INTEGER; 

    假如定义了MIDL_PASS 

    // 如果编译器直接支持64位整数可以直接使用QuadPart(64位)  
    typedef struct _LARGE_INTEGER {
        LONGLONG QuadPart;
    } LARGE_INTEGER; 


    没有定义MIDL_PASS
    typedef union _LARGE_INTEGER {
        struct {
            DWORD LowPart;
            LONG HighPart;
        };
        struct {
            DWORD LowPart;
            LONG HighPart;
        } u;
        LONGLONG QuadPart;
    } LARGE_INTEGER; 


    下面说一下这个结构的作用

    如果你有编译器直接支持64位整数可以直接使用QuadPart(64位),

    否则分别对LowPart(32位)和HighPart(32位)存取,HighPart的最高位为符号位。  
       
      表示数的范围:--3689348814741910324到+4611686018427387903   



    =============================================================================================

    =============================================================================================
    还是有点不明白的是
       struct {
            DWORD LowPart;
            LONG HighPart;
        };//这个是类型声明 好像不合语法
        struct {
            DWORD LowPart;
            LONG HighPart;
        } u; //这里定义变量 也好像不和语法 
       有这样声明和定义的吗?谁来解释下

    =============================================================================================
    struct {
            DWORD LowPart;
            LONG HighPart;
        };//声明了一个无名结构


    struct {
            DWORD LowPart;
            LONG HighPart;
        }
     u//这里用刚才的无名结构定义了一个结构变量 u



    =============================================================================================
  • 相关阅读:
    转载Dockerfile 中 RUN, CMD, ENTRYPOINT 的区别
    在linux上通过ssh使用github
    dns服务
    centos6 free 和 centos 7的free 的差异与对比
    无重复字符的最长子串
    go get命令在go mod目录下与正常目录执行的区别
    安装git
    转载 筛子算法之golang实现求素数解析
    Go语言基础之并发
    go之无缓冲channel(通道)和有缓冲channel(通道)
  • 原文地址:https://www.cnblogs.com/roger0212/p/4436650.html
Copyright © 2011-2022 走看看