"int"真的要求至少与C中的"short"一样大吗?

Her*_*che 16 c standards c99 c89

我在不同来源阅读了几次(例如维基百科:http://en.wikipedia.org/wiki/C_variable_types_and_declarations#Size),在C中,长的长不小于长,这不小而不是一个不小于短的int.

但是,我已经在C90和C99标准中查明了这一点,并且没有找到相应的条款.我发现只有C90和C99规定了最小型号(C90和C99标准中的第5.2.4.2.1节),而不是它们相互之间的尺寸.我错过了标准中的某些内容吗?

Kei*_*son 13

6.3.1.1定义任意两个整数类型的相对整数转换等级.这是一个抽象概念,仅用于定义两种类型之间的关系; 没有任何值被定义为任何类型的等级.

6.2.5p8说:

对于具有相同签名和不同整数转换等级的任何两个整数类型(参见6.3.1.1),具有较小整数转换等级的类型的值范围是另一种类型的值的子范围.

它没有说明它们的相对大小,事实上它在理论上可能符合(但有意的反常)实现sizeof (short) > sizeof (int).只有当short有更多的填充位(对值没有贡献的位)时才有可能int.这是不太可能的; 大多数实现根本没有填充位,我知道没有实现整数类型范围的关系与它们的大小关系不同.

参考:N1256,最新的C99草案,或N1570,最新的C2011草案.


Nik*_* B. 10

我假设维基百科文章指的是这些整数类型的值范围,而不是它们的大小(如报告所示sizeof).

C99标准草案N1256:

6.3.1.1/1

等级long long int应大于等级long int,等级int应大于等级short int,等级应大于等级signed char.

6.2.5/8

对于具有相同签名和不同整数转换等级的任何两个整数类型(参见6.3.1.1),具有较小整数转换等级的类型的值范围是另一种类型的值的子范围.


pmg*_*pmg 6

C2011标准

6.3.1.1/1

-的排名长长INT应大于军衔更高的长整型,这应该比军衔更高的INT,这应该比军衔更高的短整型,这应该比军衔更高的符号字符.