如何以及在哪里保证 anuint8_t
是 8 位?
深入研究 N3242 -“工作草案,C++ 编程语言标准”,第 18.4.1 节 < cstdint > 概要说 -
`typedef unsigned integer type uint8_t; // optional`
因此,本质上,完全不需要定义符合 C++ 标准的库uint8_t
。
更新:可能只是在问,标准的哪一行说 uintN_t 类型是 N 位?
如何以及在哪里保证 anuint8_t
是 8 位?
深入研究 N3242 -“工作草案,C++ 编程语言标准”,第 18.4.1 节 < cstdint > 概要说 -
`typedef unsigned integer type uint8_t; // optional`
因此,本质上,完全不需要定义符合 C++ 标准的库uint8_t
。
更新:可能只是在问,标准的哪一行说 uintN_t 类型是 N 位?
从 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。
正确的。typedef
正如 Nikos 提到的(+1),当/如果不存在/声明时,您只需要一个替代方案。
这些<stdint.h>
类型是参考 C99 标准定义的。
C99 草案 N869 §7.17.1.1/2:
“typedef 名称N指定宽度为N的无符号整数类型。因此, 表示宽度正好为 24 位的无符号整数类型。”uint
_t
uint24_t
如果一个类型由 定义<stdint.h>
,那么它的关联宏也是如此,如果没有定义该类型,那么它的关联宏也不是,由 C99 §7.18/4 定义。
因此,您可以使用宏的存在与否(C99 §7.18.2.1 要求)来检查类型定义UINT8_MAX
的存在与否。uint8_t
uint8_t
保证为 8 位宽。如果它不存在,那么显然你不能使用它。但如果它在那里,它是 8 位。不可能在哪里提供但不是 8 位。