<inttypes.h> 文件还提供了用于指定 printf 和 scanf 格式说明符的宏。实际上,这些宏会根据内置于宏名称中的参数的位数,在格式说明符前面放置一个 l 或 ll,将参数指定为 long
或 long long
类型。
printf(3C) 的宏以十进制、八进制、无符号和十六进制格式列显 8 位、16 位、32 位和 64 位整数以及最短和最长整数类型。例如,以十六进制表示法列显 64 位整数:
int64_t i; printf("i =%" PRIx64 "\n", i);
同样,scanf(3C) 的宏也以十进制、八进制、无符号和十六进制格式读取 8 位、16 位、32 位和 64 位整数以及最长整数类型。例如,读取无符号的 64 位十进制整数:
uint64_t u; scanf("%" SCNu64 "\n", &u);
请勿毫无限制地使用这些宏,最好将其与定宽类型一起使用。有关更多详细信息,请参阅定宽的整数类型一节。