我有一些在Windows和Linux上构建的代码。Linux在这一点上总是32位,但Windows是32位和64位。Windows希望将time_t设置为64位,而Linux仍然将其设置为32位。我很好,除了在某些地方time_t值被转换为字符串。所以,当time_T是32位时,应该使用%d来完成,而当它使用%lld时,它是64位的......这样做的聪明方法是什么?另外:有没有其他想法,比如,time_t传递给printf风格的函数来解决这个问题?
发布于 2018-05-10 13:01:24
根据C标准,time_t是一种算术类型,“能够代表时间”。所以,它可能是double。
也许最干净的解决方案是将值转换为你想要的任何类型。你可能想要一个unsigned long long或者unsigned long:
printf("%llu\n", (unsigned long long)t);
发布于 2018-05-10 14:20:38
我认为唯一真正可移植的方法是使用strftime,将time_t转换为字符串。
如果你确定,你只能在平台上操作的地方time_t是int,你可以转换为intmax_t(从stdint.h),并使用PRIdMAX(从inttypes.h)。
https://stackoverflow.com/questions/-100004062
复制相似问题