私が入手した非常に古いコードがあります。そのような日数の遅延計算が存在する場所:
#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に保存できるのは、2つの瞬間の間の丸日数になることを私は知っています。このメッセージを回避するには?
他の場所で非常に役立つ可能性があるため、この番号のすべての警告を無効にしたくありません。データ損失の可能性を回避する正しい方法はありますか? DWORD 以外のタイプで日数を数えることはできません (または、この警告の場所をコードの他の部分に移動します)。
それが避けられないと思われる場合、最善の解決策は現在の日付を取得する別のメカニズムを使用することです - SomeULONGLONGMoment (つまり ULONGLONG) を使用する型に変換する方法があれば、それを使用できます。