1

如何以及在哪里保证 anuint8_t是 8 位?

深入研究 N3242 -“工作草案,C++ 编程语言标准”,第 18.4.1 节 < cstdint > 概要说 -

       `typedef unsigned integer type uint8_t; // optional`

因此,本质上,完全不需要定义符合 C++ 标准的库uint8_t

更新:可能只是在问,标准的哪一行说 uintN_t 类型是 N 位?

4

3 回答 3

6

从 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),当/如果不存在/声明时,您只需要一个替代方案。

于 2013-02-23T09:51:05.710 回答
3

这些<stdint.h> 类型是参考 C99 标准定义的。

C99 草案 N869 §7.17.1.1/2
“typedef 名称N指定宽度为N的无符号整数类型。因此, 表示宽度正好为 24 位的无符号整数类型。”uint_tuint24_t

如果一个类型由 定义<stdint.h>,那么它的关联宏也是如此,如果没有定义该类型,那么它的关联宏也不是,由 C99 §7.18/4 定义。

因此,您可以使用宏的存在与否(C99 §7.18.2.1 要求)来检查类型定义UINT8_MAX的存在与否。uint8_t

于 2013-02-23T09:57:44.497 回答
1

uint8_t保证为 8 位宽。如果它不存在,那么显然你不能使用它。但如果它在那里,它是 8 位。不可能在哪里提供但不是 8 位。

于 2013-02-23T09:36:14.133 回答