当我遇到 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 实现为这样呢?我想知道可能是兼容性之类的原因。

最佳答案

这显然是为了避免在 union 中使用匿名结构而进行的调整。这已被 Visual C++ 支持,但在语言标准中是不允许的。 (有关没有 DUMMYSTRUCTNAME 的结构声明,请参阅 can't make sense of LARGE_INTEGER struct 。)添加名称是为了使 union 与标准 C++ 一致,可能使用某种自动化工具。
LARGE_INTEGERLater versions 完全摆脱了结构,只有 QuadPart

关于c++ - LARGE_INTEGER 和 DUMMYSTRUCTNAME,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52732164/

10-11 11:41