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
).
6.3.1.1/1
等级
long long int
应大于等级long int
,等级int
应大于等级short int
,等级应大于等级signed char
.
6.2.5/8
对于具有相同签名和不同整数转换等级的任何两个整数类型(参见6.3.1.1),具有较小整数转换等级的类型的值范围是另一种类型的值的子范围.