このブログは、旧・はてなダイアリー「檜山正幸のキマイラ飼育記 メモ編」(http://d.hatena.ne.jp/m-hiyama-memo/)のデータを移行・保存したものであり、今後(2019年1月以降)更新の予定はありません。

今後の更新は、新しいブログ http://m-hiyama-memo.hatenablog.com/ で行います。

MSVCとgcc新旧のtime

まずはMSVC2010:

#include <time.h>
#include <stdio.h>


int _tmain(int argc, _TCHAR* argv[])
{
	printf("sizeof(int):%d\n", sizeof(int));	
	printf("sizeof(long):%d\n", sizeof(long));	
	printf("sizeof(time_t):%d\n", sizeof(time_t));	
	return 0;
}


sizeof(int):4
sizeof(long):4
sizeof(time_t):8
続行するには何かキーを押してください . . .

time_tは8バイトある。


MinGW32のgccのtime.hでも、__time64_t, __time32_tは定義されている。

/* A 64-bit time_t to get to Y3K */
#ifndef _TIME64_T_DEFINED
typedef __int64 __time64_t;
#define _TIME64_T_DEFINED
#endif

とか。time_tを32と64のどっちにするかが問題。

古いgccではデフォルトで32ビットのようだ。TDM-GCCでは64ビットだった。


$ g++ test.cpp -o test.exe

$ ./test.exe
sizeof(int): 4
sizeof(long): 4
sizeof(time_t): 4

$ tdm-g++ test.cpp -o test.exe

$ ./test.exe
sizeof(int): 4
sizeof(long): 4
sizeof(time_t): 8

$


time()が返す値を見る。


$ ./test.exe
sizeof(int): 4
sizeof(long): 4
sizeof(time_t): 4
time: 1452329988

$ tdm-g++ test.cpp -o test.exe

$ ./test.exe
sizeof(int): 4
sizeof(long): 4
sizeof(time_t): 8
time: 1452329992

$


sizeof(int):4
sizeof(long):4
sizeof(time_t):8
time: 1452330052
続行するには何かキーを押してください . . .

現時点で、14億ナンボだ。もうしばらくは32bitでも大丈夫だろうが、早めに64bitにするのが望ましい。

対策としては、

#define TIME64_T __time64_t

TIME64_T t = (TIME64_T)time(NULL);

としてから使うことにするか。