&在哪里可以保证uint8_t
是8位?
深入研究N3242 - “编程语言C ++标准工作草案”,第18.4.1节 < cstdint>概要说 -
`typedef unsigned integer type uint8_t; // optional`
因此,实质上,根本不需要符合C ++标准的库来定义uint8_t
。
更新:可能只是问,标准的哪一行说uintN_t类型是N位?
答案 0 :(得分:5)
来自C ++:
18.4.1标题概要
...标题定义了所有函数,类型和宏,与C标准中的7.18相同。 ...
来自C:
7.20.1.1精确宽度整数类型
1 typedef名称intN_t指定带宽度的有符号整数类型 N,没有填充位,以及二进制补码表示。从而, int8_t表示这样的有符号整数类型,其宽度恰好为8 位。
2 typedef名称uintN_t指定带有的无符号整数类型 宽度N和无填充位。因此,uint24_t表示这样的无符号 整数类型,宽度恰好为24位。
3这些类型是可选的。但是,如果实现提供 宽度为8,16,32或64位的整数类型,无填充位, 和(对于签名类型)有两个补码 表示,它应定义相应的typedef名称。
因此,实质上,根本不需要一个符合C ++标准的库来定义uint8_t。
正确。正如Nikos所提到的(+1),如果typedef
不存在/宣布,你只需要一个替代方案。
答案 1 :(得分:2)
<stdint.h>
类型是参考C99标准定义的。
C99草案N869§7.17.1.1/ 2 :
“typedef名称uint
N_t
指定宽度为 N 的无符号整数类型。从而,uint24_t
表示无符号整数类型,宽度恰好为24位。“
如果类型由<stdint.h>
定义,那么它的关联宏也是如此,如果没有定义类型,那么它的关联宏也不是C99§7.18/ 4。
因此,您可以使用宏UINT8_MAX
的存在与否(C99§7.18.2.1要求)来检查是否存在uint8_t
类型定义。
答案 2 :(得分:1)
uint8_t
保证为8位宽。如果它不存在,那么显然你不能使用它。但如果它在那里,它是8位。它不可能提供,但不是8位。