【发布时间】:2011-01-28 20:57:20
【问题描述】:
我有一些在 Windows 和 Linux 上构建的代码。此时的 Linux 始终是 32 位,但 Windows 是 32 位和 64 位。 Windows 希望 time_t 是 64 位的,而 Linux 仍然是 32 位的。我很好,除了在某些地方 time_t 值被转换为字符串。因此,当 time_T 为 32 位时,应使用 %d 完成,而当 time_T 为 64 位时,应使用 %lld... 什么是聪明的方法呢?另外:有什么想法可以找到将 time_t 传递给 printf 样式函数以解决此问题的所有地方吗?
编辑: 我想出了将 TT_FMT 声明为“%d”或“%lld”,然后将我的 printfs 更改为 printf("time: %d, register: blah") 为 printf("time: " TT_FMT ", register: blah") 有没有更好的办法?以及如何找到它们?
【问题讨论】:
-
其实我觉得你想使用无符号格式说明符。
-
Tim,它在 Linux 和 Windows 上都已签名(请参阅 stackoverflow.com/questions/471248/…)。否则,它就无法代表丹尼斯·里奇的一生。 ;) (en.wikipedia.org/wiki/Unix_time#Representing_the_number)
-
实际上,time_t 在 Linux x86_64 的当代 glibcs 上也是 64 位宽。
-
@user562374 仅在 64 位 Linux 上。 32-big glibc 刚刚在 version 2.32 中获得了 64 位 time_t 支持
标签: c portability 32bit-64bit