Cbl*_*e X 2 c types integer stdint
我正在学习整数转换等级,但我有一个问题,我经常使用 stdint.h 库,并且我读到的有关“整数转换等级”的内容是:
“任何标准整数类型的等级应大于具有相同大小的任何扩展整数类型的等级。”
例如,据我所知,“int”是标准整数类型,但使用 stdint.hi 具有等于“int”的“int32_t”
我知道 stdint.h 库使用“typedef”,因此理论上 int 和 int32_t 是相等的,但我在论坛中读到“扩展整数类型”使用 (u)intxx_t 来引用
所以我的问题是,stdint.h 库中包含的“精确宽度整数”是“标准整数类型”还是被视为“扩展整数类型”?
感谢您的回答!
中列出的类型stdint.h
不一定是扩展整数类型。
C 标准第 6.2.5 节定义了扩展整数类型:
\n\n\n4有五种标准有符号整数类型,分别指定为
\nsigned char
、short int
、int
、long int
和long long int
。(这些和其他类型可以通过几种附加方式指定,如 6.7.2 中所述。)还可能存在实现定义的扩展有符号整数类型。标准和扩展有符号整数类型\n统称为有符号整数类型。...
\n7标准有符号整数类型和标准无符号整数类型统称为标准整数类型,扩展有符号整数类型和扩展无符号整数类型统称为扩展整数类型。
\n
因此上面指出扩展整数类型是实现定义的。
\n第 7.20p4 节描述了 stdint.h 标头中定义的类型:
\n\n\n对于这里描述的实现提供的每种类型,261) \n
\n<stdint.h>
应声明该 typedef 名称并定义关联的宏。相反,对于此处描述的每种类型,如果实现未提供,<stdint.h>
则不应声明 typedef 名称,也不应定义关联的宏。实现应提供描述为 \xe2\x80\x98\xe2\x80\x98required\xe2\x80\x99\xe2\x80\x99 的类型,\n但不需要提供任何其他类型(描述为 \xe2\x80 \x98\xe2\x80\x98可选\xe2\x80\x99\xe2\x80\x99)。
所以这表明其中的类型stdint.h
是其他类型的 typedef。关键部分是脚注 261,其中指出:
\n\n\n
\n- 其中一些类型可能表示实现定义的扩展整数类型。
\n
因此, 中的类型是否stdint.h
被视为标准或扩展整数类型取决于它们的 typedef 是什么。