首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >无法理解LARGE_INTEGER结构

无法理解LARGE_INTEGER结构
EN

Stack Overflow用户
提问于 2010-08-31 15:30:21
回答 2查看 11.9K关注 0票数 23

在C++和一些Winapi的东西上,我遇到了这个家伙:

#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,这要么是一个非常紧凑的结构,其中只有一个龙骨,要么是更有趣的情况,它变成了一个联合。

如果这是一个联合,对我来说仍然有意义,有两种可能的访问,一次是在一个块中的LONGLONG,一次是具有Low和Highpart的结构。到目前一切尚好。

但是我无法理解这个结构被声明了两次,而且都是一样的。它们似乎都是匿名的,但后者可以通过"u“获得。

现在来回答我的问题:

为什么定义这两个结构(冗余的?),如果我甚至无法访问第一个结构,由于没有绑定到任何类型/变量名,那么第一个结构的用途是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-08-31 15:42:18

微软提供了匿名结构作为extension (他们的示例显示了一个结构包含在另一个结构中,但联合中的结构类似)。如果您不介意基于其扩展的不可移植代码,您可以使用如下内容:

LARGE_INTEGER a;
a.LowPart = 1;

但是如果你想要可移植的代码,你需要:

a.u.LowPart = 1;

联合允许您使用这两种方法中的任何一种。

票数 23
EN

Stack Overflow用户

发布于 2010-08-31 15:35:36

您可以直接访问LowPartHighPart,而不必通过u成员。作为:

LARGE_INTEGER x;
x.HighPart = 42;

(如果未命名的结构可以是标准C中的联合成员,则需要查找。)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3606902

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档