int16_t保证签名吗?

tem*_*def 3 c unsigned signed

int16_t声明的类型是<stdint.h> 保证签名的,还是应该签名?我认为它必须签名,但令人惊讶的是我似乎无法找到任何明确提到这一点的确凿证据(即对规范的引用).

有人可以证实这一点吗?如果可能的话,我真的很感激具体参考规范.

Phi*_*ter 6

n1256 7.18.1p1说:

当typedef名称仅在初始u的存在或不存在时有所不同时,它们应表示6.2.5中描述的相应的有符号和无符号类型; 提供这些相应类型之一的实现也应提供另一种.

由于存在a int16_t和a uint16_t,int16_t因此签名.

或者确实是7.18.1.1p1:

typedef name intN_t指定一个有符号整数类型,其宽度为N,没有填充位和二进制补码表示.因此,int8_t表示具有正好8位宽度的有符号整数类型.

哪个更明确.

编辑:虽然严格来说,int16_t不保证签名,因为它不能保证存在.例如,如果您有CHAR_BIT == 9,则不能有int16_t类型.

  • 在7.18.1.1中更明确地讨论了该主题:"typedef name intN_t指定一个有符号整数类型,其宽度为N,没有填充位,以及二进制补码表示." (3认同)
  • "例如,如果你有`CHAR_BIT == 9`,则可能没有'int16_t`类型." 应该读作"如果你有'CHAR_BIT == 9`,例如,**不能是**`int16_t`类型." (2认同)