C/C++可移植类型 stdint.h 和inttypes.h

可移植类型:stdint.hinttypes.h

参考:《C Primer Plus 第6版》 3.4.5节 第55页 可移植类型:stdint.h和inttypes.h

C语言提供了许多有用的整数类型。但是,某些类型名在不同系统中的功能不一样。 C99 新增了两个头文件 stdint.hinttypes.h ,以确保C语言的类型在各系统中的功能相同。

C语言为现有类型创建了更多类型名。这些新的类型名定义在stdint.h头文件中。例如,int32_t表示32位的有符号整数类型。在使用32位int的系统中,头文件会把int32_t作为int的别名。不同的系统也可以定义相同的类型名。例如,int为16位、long为32位的系统会把int32_t作为long的别名。然后,使用int32_t类型编写程序,并包含stdint.h头文件时,编译器会把intlong替换成与当前系统匹配的类型。

上面讨论的类型别名时 精确宽度整数类型(exact-width integer type) 的示例,int32_t表示整数类型的宽度正好是32位。但是,计算机的底层系统可能不支持。因此,精确宽度整数类型是可选项。

如果系统不支持精确宽度整数类型怎么办? C99C11 提供了第2类别名聚合。一些类型名保证所表示的类型一定是至少有指定宽度的最小整数类型。这组类型集合被称为 最小宽度类型(minimum width type) 。例如,int_least8_t是可容纳8位有符号整数值的类型中宽度最小的类型的一个别名。如果某系统最小整数类型是16位,可能不会定义int8_t类型。尽管如此,该系统仍可使用int_least8_t类型,但可能把该类型实现为16位整数类型。

一些程序员可能更关心速度而非空间。为此, C99 定义了一组可使计算达到最快的类型集合。这组类型集合被称为 最快最小宽度类型(fastst minimum width type) 。例如,int_fast8_t被定义为系统中对8位有符号值而言运算最快的整数类型的别名。

还有一些程序员需要系统的最大整数类型。为此, C99 定义了最大的有符号整数类型intmax_t、和无符号整数类型uintmax_t等,可储存任何有效的有符号整数值。这些类型有可能比long longunsigned long类型更大,因为C编译器除了实现标准规定的类型以外,还可利用 C 语言实现其他类型。例如,一些编译器在标准引入long long类型之前,已提前实现了该类型。

C99C11 不仅提供可移植的类型名,还提供相应的输入和输出。例如,printf()打印特定类型时要求与相应的转换说明匹配。如果需要打印int32_t类型的值,有些定义使用%d,而有些定义使用%ldC 标准针对这一情况,提供了一些字符串宏来显示可以指类型。例如,inttypes.h头文件中定义了PRID32字符串宏,代表打印32位有符号值的合适转换说明(如d或l)。

注意:可能有些编译器仍未实现inttypes.h头文件及其相关功能。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值