uint8_t - 8位保证

时间:2013-02-23 09:33:33

标签: c++

&在哪里可以保证uint8_t是8位?

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

       `typedef unsigned integer type uint8_t; // optional`

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

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

3 个答案:

答案 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位。