【问题标题】:Is it possible for int_least16_t to be an alias for int rather than short?int_least16_t 是否有可能成为 int 的别名而不是 short 的别名?
【发布时间】:2019-04-22 17:22:43
【问题描述】:
从 C99 标准中,我可以看到 int_least16_t 保证至少有 16 位的宽度。
7.18.1.2 最小宽度整数类型
...
typedef 名称 uint_leastN_t 指定了一个宽度至少为 N 的无符号整数类型,因此没有更小尺寸的无符号整数类型至少具有指定的宽度。因此,uint_least16_t 表示一个无符号整数类型,其宽度至少为 16 位。
...
据我所知,该标准仅对类型的最小宽度进行了限制,不一定对它们的等级进行了限制。因此,在 int 和 short 都具有 16 位宽度的架构上,尽管 short 的等级较低,但 int_least16_t 是否可能是 int 的别名?
【问题讨论】:
标签:
c
types
integer
int
stdint
【解决方案1】:
据我所知,该标准仅对
类型的最小宽度,不一定是它们的等级。所以在一个
int 和 short 都具有 16 位宽度的架构,是吗?
int_least16_t 可能是 int 的别名,尽管
短期排名较低的事实?
您已引用标准相关文本的全部内容。是的,如果short 与int 大小相同,并且没有至少16 位的更窄整数类型,那么int_least16_t 可以是int。
确实,如果实现仅支持 64 位整数,那么 long long int、long int、int 和 short int 都是 64 位,那么 int_least16_t 可能是 long long int。或者如果signed char 在那个或其他一些实现中是16 位宽,那么int_least16_t 可能是signed char。或者在某些情况下,它可能是扩展的有符号整数类型,而不是上述任何一种。