c语言 - 包含在 stdint.h 库中的整数类型是否"extended integer types"?



我正在学习整数转换排名,但我有一个问题,我经常使用stint .h库,以及我读到的关于"整数转换排名";它说:

任何标准整型的排名均应大于相同大小的扩展整型的排名。 例如,据我所知,"int"是一个标准的整数类型,但使用stint .h,我有"int32_t"它等于"int"

我知道stint .h库使用"typedef"所以理论上int和int32_t是相等的,但我在论坛上读到"扩展整数类型";使用(u)intxx_t作为引用

我的问题是,"精确宽度整数"stint .h库中包括"标准整数类型"。或者它们被认为是"扩展整数类型"?

谢谢你的回答!

stdint.h中列出的类型不一定是扩展整数类型。

C标准的6.2.5节定义了扩展的整数类型:

4有5种标准符号整数类型,分别为signed charshort intintlong intlong long int。(这些和其他可以用几种其他方式指定类型,如6.7.2)。也可以有实现定义的扩展的有符号整数类型。标准和扩展的有符号整数类型是统称为有符号整数类型

7标准有符号整型和标准无符号整型合称称为标准整数类型,扩展有符号整数类型和扩展无符号整数类型统称为扩展整数类型

所以上面说扩展整数类型是实现定义的.

第7.20节描述了stint .h头文件中定义的类型:

对于这里所描述的实现提供的每个类型,261)<stdint.h>应声明该类型定义名称并定义相关的宏。相反,对于本文所述的每种类型,所述implementation没有提供,<stdint.h>不声明类型定义也不能定义相关的宏。一个实施应提供"所需"的类型;但不需要提供任何其他(描述为"可选")。

这表明stdint.h中的类型是其他类型的类型定义。关键部分是脚注261,它指出:

  1. 这些类型中的一些可能表示实现定义的扩展整数类型。

所以stdint.h中的类型是标准的还是扩展的整数类型取决于它们是什么类型的定义。

最新更新