以下约束是已知的:
> 16< = CHAR_BIT * sizeof(int)< = CHAR_BIT * sizeof(long)
> 32< = CHAR_BIT * sizeof(long)< = CHAR_BIT * sizeof(long long)
和其他十几个,其中典型的8位字节架构意味着2< = sizeof(int)&&& 4 <= sizeof(long)
这是否意味着sizeof(int)== 3&& sizeof(long)== 5是一个有效的行为?
如果是 – 是否有任何已知的编译器/架构以类似的方式行事?
解决方法
There are four signed integer types: “signed char”,“short int”,
“int”,and “long int.” In this list,each type provides at least as
much storage as those preceding it in the list. Plain ints have the
natural size suggested by the architecture of the execution
environment39) ; the other signed integer types are provided to meet
special needs.
基本上我们知道的是sizeof(char)== 1,每个“较大的”类型至少是一个大的,int是一个“自然”的体系结构大小(据我所知,“自然”)到编译器编写器).我们不知道像CHAR_BIT * sizeof(int)= 32等任何东西.还要记住,CHAR_BIT也不一定是8.
对于那些这些尺寸是本地使用的硬件,可以允许使用三个字节的int和5个字节长的字节.然而,我不知道任何这样的硬件/架构.
编辑:正如@Nigel Harper评论中所指出的那样,我们知道int必须至少为16位,长度至少为32位以满足范围要求.否则我们没有任何具体的大小限制,除了如上所述.