_time64
今日_time64を呼び出して時刻を取得する処理を見ていて、
__time64_t nTime = ::_time64( NULL );
ふとリファレンスの下記の記述が気になったのですが、引数にNULLを指定しても戻り値にはちゃんと値が返ってきました。
http://msdn.microsoft.com/ja-jp/ms397016.aspx
http://msdn.microsoft.com/ja-jp/1f4c8f33.aspx
- 戻り値は、timer で指定した位置に格納されます。このパラメータには NULL を指定できますが、その場合戻り値は格納されません。
余談ですが、引数にNULLを指定した場合の動作を確認すべく下記のようなコードを書いたのですが、
#include <stdio.h> #include <time.h> #define HEX_FORMAT "0x%08x" int main() { __time64_t nTime1 = 0I64; __time64_t nTime2 = 0I64; __time64_t nTime3 = 0I64; nTime1 = ::_time64( &nTime2 ) nTime3 = ::_time64( NULL ) fprintf( stdout, HEX_FORMAT ", " HEX_FORMAT ", " HEX_FORMAT "\n", nTime1, nTime2, nTime3 ); (void)fgetc( stdin ); return 0; }
2番目の「nTime2」出力が必ずゼロになるので、20分程悩んでしまいましたorz
問題があったのは書式指定の部分で、出力元データが64bit変数である事を忘れていたのが原因でした・・・。よって下記のように修正。
#define HEX_FORMAT "0x%016I64x"