【发布时间】:2013-08-30 13:40:01
【问题描述】:
C 中的 printf 和 scanf 函数族使用一些与基本数据类型相对应的原始格式说明符 - %d 用于 int,%llu 用于 unsigned long long int 等。
然而,有大量标准化的类型别名希望在实践中使用,例如int32fast_t,而我们不能也不应该知道底层的基本类型。对于stdint.h 中的别名,幸运的是,C 标准在inttypes.h 中指定了一组宏来生成相应的格式字符串,如PRI32。
Posix 是否有类似的宏集? Posix 有大量的不透明类型,如 ssize_t、pid_t、rlim_t、suseconds_t 等,它们都是基本整数类型的变体。如何在格式字符串中可移植地使用这些类型?
【问题讨论】:
-
如果一切都失败了,您可以随时转换为
(u)intmax_t并打印出来 -
有趣的解决方法 - 我从来没有想过:-S
-
(虽然倒退,即
scanf,但我必须进行手动溢出检查并找出要准确比较的内容。) -
我似乎记得有一些 typedef 不知道类型是整数还是浮点数(在时间处理区域中)。在这种情况下,转换为 long double ;-)
-
@AProgrammer:是的,
time_t不保证是整数或浮点数。这甚至在 C 标准库中,我认为也没有相应的宏。