Posix是否为printf/scanf提供格式字符串宏

Does Posix supply format string macros for printf/scanf?

本文关键字:格式 字符串 scanf 是否 printf Posix      更新时间:2023-10-16

C中的printfscanf函数族使用与基本数据类型–%d用于int%llu用于unsigned long long int

然而,人们希望在实践中使用大量的标准化类型别名,例如int32fast_t,并且人们不能也不应该知道底层的基本类型。对于stdint.h中的别名,谢天谢地,C标准指定了一组宏来生成inttypes.h中相应的格式字符串,如PRI32

Posix是否有类似的宏集?Posix有很多不透明类型,如ssize_tpid_trlim_tsuseconds_t等,它们都是基本整数类型的变体。如何在格式化字符串中方便地使用这些类型?

sfio包(AT&T实验室开源AST软件的一部分)具有类似于printf和scanf的功能,可以指定数值的大小(通常使用sizeof())作为附加参数。一些例子:

sfprintf(sfstdout, "%I*d", sizeof(intval), intval);
sfscanf(sfstdin, "%I*f", sizeof(fltval), &fltval);

USENIX论文:使用Sfio的扩展数据格式。

Posix保证sys/types.h值是"适当长度的算术类型",其他一些值被进一步指定为无符号或有符号的"扩展长度"。输出这些内容的唯一标准可接受的方式是通过最大适当的语言类型(u)intmax_t中的强制转换进行传输,然后输出。

输入它们会更危险(即,以符合标准的方式是不可能的),因为很难保证转换到基本类型不会溢出一些内容。