59-参考资料VI_扩展的整数类型
B.6 参考资料VI:扩展的整数类型
第3章介绍过,C99的 inttypes.h
头文件为不同的整数类型提供一套系统的别名。这些名称与标准名称相比,能更清楚地描述类型的性质。例如, int
类型可能是 16
位、 32
位或 64
位,但是 int32_t
类型一定是 32
位。
更精确地说, inttypes.h
头文件定义的一些宏可用于 scanf()
和 printf()
函数中读写这些类型的整数。 inttypes.h
头文件包含的 stdlib.h
头文件提供实际的类型定义。格式化宏可以与其他字符串拼接起来形成合适格式化的字符串。
该头文件中的类型都使用 typedef
定义。例如, 32
位系统的 int
可能使用这样的定义:
typedef int int32_t;
用 #define
指令定义转换说明。例如,使用之前定义的 int32_t
的系统可以这样定义:
#define PRId32 "d" // 输出说明符
#define SCNd32 "d" // 输入说明符
使用这些定义,可以声明扩展的整型变量、输入一个值和显示该值:
int32_t cd_sales; // 32位整数类型
scanf("%" SCNd32, &cd_sales);
printf("CD sales = %10" PRId32 " units\n", cd_sales);
如果需要,可以把字符串拼接起得到最终的格式字符串。因此,上面的代码可以这样写:
int cd_sales; // 32位整数类型
scanf("%d", &cd_sales);
printf("CD sales = %10d units\n", cd_sales);
如果把原始代码移植到16位 int
的系统中,该系统可能把 int32_t
定义为 long
,把 PRId32
定义为 "ld"
。但是,仍可以使用相同的代码,只要知道系统使用的是32位整型即可。
该参考资料的其余部分列出了扩展类型、转换说明以及表示类型限制的宏。