MK.*_*MK. 16 c portability 32bit-64bit
我有一些代码,它们都是在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",注册:blah")有更好的方法吗?我如何找到它们?
Alo*_*hal 11
根据C标准,time_t是一种算术类型,"能够代表时间".所以,它可能是double例如.(Posix 更明确地提到这一点,并且还保证time()返回自Epoch以来的秒数 - 后者不受C标准保证.)
也许最干净的解决方案是将值转换为您想要的任何类型.你可能想要一个unsigned long long或unsigned long:
printf("%llu\n", (unsigned long long)t);
Run Code Online (Sandbox Code Playgroud)
我认为唯一真正可移植的方法是使用strftime转换time_t为字符串.
如果你确定,你只能在平台上操作的地方time_t是int,你可以转换为intmax_t(从stdint.h),并使用打印PRIdMAX(从inttypes.h).
| 归档时间: |
|
| 查看次数: |
22328 次 |
| 最近记录: |