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

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

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

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

但是,请注意, sizeof(char) == 1 ,根据定义。 所以sizeof(char) <= sizeof( 其他任何东西 )

是的,它总是如此。


为了澄清,在这里,我熟悉的现实总是如此。 如果你想赢得一个赌注,你可以参考bdonlan的学习答案,但是如果你遇到过sizeof(int) > sizeof(long)你可以让我的许可给实施者一个好的打击。

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

int≥16≥短的大小

长度≥32≥int的大小

长长≥64尺寸长

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

实用的C ++编程说明了这一点

C ++保证存储<= int <= long

还在寻找很久

至少对于ISO C ++,这在3.9.1 [basic.fundamental] / 2中的标准中是明确定义的(除了明显的原因除外long long ):

有四种带符号的整数类型:“signed char”,“short int”,“int”和“long int”。在此列表中,每种类型至少提供与列表中前面的存储一样多的存储空间

请注意,这是存储而不是值范围。 这特别意味着sizeof