C语言 stdint. h库中包含的整数类型是否为“扩展整数类型”?

yvfmudvl  于 2022-12-11  发布在  其他
关注(0)|答案(1)|浏览(127)

我正在学习整数转换排名,但我有一个问题,我经常使用stdint. h库,对于我所阅读到的“整数转换排名”,它说:
“任何标准整数类型的秩都应大于任何具有相同大小的扩展整数类型的秩。”
例如,据我所知,“int”是一个标准的整数类型,但使用stdint. h时,我有“int32_t”,它等于“int”
我知道stdint. h库使用“typedef”,所以理论上int和int32_t是相等的,但是我在论坛上读到“扩展整数类型”使用(u)intxx_t来引用
因此,我的问题是,stdint. h库中包含的“精确宽度整数”是“标准整数类型”还是被视为“扩展整数类型”?
感谢您的回答!

dw1jzc5e

dw1jzc5e1#

stdint.h中列出的类型 * 不一定 * 是扩展整数类型。
C standard的6.2.5节定义了扩展整数类型

  • 4* 有五种标准的带符号整数类型,分别指定为signed charshort intintlong intlong long int。(这些和其它类型可以以几种附加方式来指定,如6.7.2中所述。)还可能存在实现定义的 * 扩展有符号整数类型 *。标准和扩展有符号整数类型统称为 * 带符号整数类型 *.

...

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

所以上面声明扩展的整型类型都是实现定义的
第7.20p4节描述了stdint. h头中定义的类型:
对于实现提供的此处描述的每个类型,261)<stdint.h>应声明该typedef名称并定义关联宏。相反,对于实现未提供的此处描述的每个类型,<stdint.h>不应声明该typedef名称,也不应定义关联宏。实现应提供描述为“必需”的那些类型,但是不需要提供任何其它的(描述为“可选的”)。
所以这说明stdint.h中的类型是其他类型的typedef。关键部分是脚注261,它说明:
1.这些类型中的一些可以表示实现定义的扩展整数类型。
因此,stdint.h中的类型是标准整数类型还是扩展整数类型取决于它们的typedef是什么。

相关问题