编译器ULARGE_INTEGER union不支持64位算术。
如果最后一行的添加溢出,下列代码会发生什么?
ULARGE_INTEGER u;
u.LowPart = ft->dwLowDateTime;
u.HighPart = ft->dwHighDateTime;
u.LowPart += 10000; //what if overflow?
答案 0 :(得分:7)
ULARGE_INTEGER
由两个无符号值组成。无符号值保证包围,因此在某种意义上它们不能“溢出”。
如果围绕发生,u.LowPart
最终将小于10,000。你可能想要的是:
u.LowPart += 10000;
if (u.LowPart < 10000) u.HighPart++;
...但是这些天编译器仍然不支持64位整数?它们自2011年以来一直被C ++标准所要求,并且自1999年以来一直是C标准。所以你真正想要的是:
u.QuadPart += 10000; // Forget about legacy compilers that doen't support 64 bits.