LARGE_INTEGER和DUMMYSTRUCTNAME

时间:2018-10-10 03:26:52

标签: c++

当我遇到LARGE_INTEGER的定义时。我发现一些问题:

typedef union _LARGE_INTEGER {
    struct {
        DWORD LowPart;
        LONG HighPart;
    } DUMMYSTRUCTNAME;
    struct {
        DWORD LowPart;
        LONG HighPart;
    } u;
    LONGLONG QuadPart;
} LARGE_INTEGER;

我们可以重写如下吗?

typedef union _LARGE_INTEGER {
    struct {
        DWORD LowPart;
        LONG HighPart;
    } DUMMYSTRUCTNAME;
    LONGLONG QuadPart;
} LARGE_INTEGER;

我认为结构u是重复的。那么,为什么MSVC这样实现LARGE_INTEGER?我想知道也许是诸如兼容性之类的原因。

1 个答案:

答案 0 :(得分:2)

显然,这是为了避免在工会中使用匿名结构,这是一种调整。 Visual C ++已支持此功能,但语言标准不允许这样做。 (有关没有DUMMYSTRUCTNAME的结构声明,请参见can't make sense of LARGE_INTEGER struct。)将添加该名称以使联合符合标准C ++(可能使用某种自动化工具)。

LARGE_INTEGER中的

Later versions完全摆脱了结构,只拥有QuadPart