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
等,它们都是基于基本的整数类型。如何在格式字符串中可移植地使用这些类型?
最佳答案
sfio 包(AT&T 实验室的开源 AST 软件的一部分)具有类似于 printf 和 scanf 的功能,它们允许您指定数值的大小(通常使用 sizeof()
)作为附加参数。一些例子:
sfprintf(sfstdout, "%I*d", sizeof(intval), intval);
sfscanf(sfstdin, "%I*f", sizeof(fltval), &fltval);
USENIX 论文:Extended Data Formatting Using Sfio .
关于c++ - Posix 是否为 printf/scanf 提供格式字符串宏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18534336/