sizeof(int)<= sizeof(long)<= sizeof(long long)总是如此?

c-s*_*ger 4 c types primitive-types

从C标准来看,int具有至少16位,长度至少为32位且长度至少为64位(如果有的话)(某些平台可能不支持).只是想知道作为标题的句子是否总是正确的.

bdo*_*lan 18

不可以.标准仅定义了每种类型的最小范围.可以想象int可以具有16位范围,但是48位填充,使其为64位(8字节,如果CHAR_BITS == 8),而长为32位(4字节).

当然,这很愚蠢.但这并不是禁止的.

但是,请注意,sizeof(char) == 1根据定义.所以sizeof(char) <= sizeof(别的).

  • 虽然C++需要`sizeof(int)<= sizeof(long)`等,但我认为C不会,并且它实际上允许`sizeof(int)> sizeof(long)`等因为填充据我所知.但两者都要求'INT_MAX <= LONG_MAX`等. (8认同)
  • 鉴于sizeof的单位是sizeof(char)(根据定义,它返回sizeof(char)的整数因子),我希望如此. (4认同)
  • @martinho,sizeof(char)== 1,sizeof永远不会返回零或负数,所以...... (3认同)

Bil*_*ard 6

根据C编程/参考表,特别是数据类型表:

int≥16≥短的大小

长≥32≥int的大小

长长≥64尺寸长

正如bdonlan所指出的,这只是指值的范围,而不是内存中的大小(以字节为单位返回sizeof).C标准没有指定每种类型可以使用的内存大小,因此它留给实现.