桜、抹茶、白、日記

名古屋市在住のC++使いのcoderの日記だったもの。

_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 を指定できますが、その場合戻り値は格納されません。

http://msdn.microsoft.com/en-us/1f4c8f33.aspx

  • The return value is stored in the location given by timer. This parameter may be NULL, in which case the return value is not stored.

余談ですが、引数に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"