当我遇到 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_INTEGER
的 Later versions 完全摆脱了结构,只有 QuadPart
。
关于c++ - LARGE_INTEGER 和 DUMMYSTRUCTNAME,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52732164/