当我遇到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?我想知道也许是诸如兼容性之类的原因。
答案 0 :(得分:2)
显然,这是为了避免在工会中使用匿名结构,这是一种调整。 Visual C ++已支持此功能,但语言标准不允许这样做。 (有关没有DUMMYSTRUCTNAME
的结构声明,请参见can't make sense of LARGE_INTEGER struct。)将添加该名称以使联合符合标准C ++(可能使用某种自动化工具)。
LARGE_INTEGER
中的 Later versions完全摆脱了结构,只拥有QuadPart
。