我得到了相当古老的代码,其中存在这样的天延迟计算:
#define _SECOND ((ULONGLONG) 10000000)
#define _MINUTE (60 * _SECOND)
#define _HOUR (60 * _MINUTE)
#define _DAY (24 * _HOUR)
FILETIME CurTime;
GetSystemTimeAsFileTime(&CurTime);
ULONGLONG qwCurResult = (((ULONGLONG)CurTime.dwHighDateTime) << 32) + CurTime.dwLowDateTime;
DWORD days = (qwCurResult - SomeULONGLONGMoment) / _DAY;
当然我会收到消息
warning C4244: 'argument' : conversion from 'ULONGLONG' to 'DWORD', possible loss of data
在现代 VS2013 编译器上。我知道,这将是可以存储在 DWORD 中的两个时刻之间的完整天数。如何避免此消息?
我不想禁用这个数字的所有警告,因为在其他地方它们可能非常有用。是否存在避免可能丢失数据的正确方法?除了 DWORD 之外,我无法计算任何类型的天数(或者我只会将带有此警告的位置移动到代码的其他部分)。
如果您认为这是无法避免的,最好的解决方案是使用另一种获取当前日期的机制 - 只要有办法将SomeULONGLONGMoment(即 ULONGLONG)转换为它使用的类型,我就可以使用它。