摘要:
我有一些在Windows和Linux上構建的程式碼. Linux在這一點總是32位,但Windows是32位和64位. Windows希望time_t為64位,而Linux仍然具有32位的功能.我很好,除了在某些地方,time_t值被轉換為字串.所以當time_T是32位時,它應該用%d完成...
我有一些在
Windows和
Linux上構建的程式碼. Linux在這一點總是32位,但Windows是32位和64位. Windows希望time_t為64位,而Linux仍然具有32位的功能.我很好,除了在某些地方,time_t值被轉換為字串.所以當time_T是32位時,它應該用%d完成,當它是64位與%lld …這是什麼聰明的方法?另外:任何想法,我可以找到所有的地方,其中的time_t被傳遞給printf風格的函式來解決這個問題?
編輯:
我想出將TT_FMT宣告為“%d”或“%lld”,然後更改我的printfs
printf(“time:%d,register:blah”)要被printf(“time:”TT_FMT“,register:blah”)
有沒有更好的辦法?我怎麼找到它們?
根據C標準,time_t是一個算術型別,“能代表時間”.所以,它可能是雙倍的. (Posix
ofollow,noindex" target="_blank">mentions this more explicitly
,並且還保證time()返回自Epoch以來的秒數 – 後者不被C標準保證.)
也許最乾淨的解決方案是將值轉換為所需的任何型別.您可能需要一個unsigned long long或unsigned long:
printf("%llu\n", (unsigned long long)t);
http://stackoverflow.com/questions/2467418/portable-way-to-deal-with-64-32-bit-time-t