ANSI C规范是否要求int
的大小等于系统的字大小(32位/ 64位)?
换句话说,我可以根据分配给int
的空间来破译系统的字大小吗?
答案 0 :(得分:6)
int
类型的大小取决于实现,但不能短于16位。请参阅Minimum Type Limits
部分here。
This Linux内核开发站点claims,long
类型的大小保证是机器的字大小,但该语句可能是错误的:我不能在标准中找到对此的任何确认,并且long
在Win64系统上只有32位宽(因为这些系统使用LLP64数据模型)。
答案 1 :(得分:3)
语言规范建议int
应具有硬件平台的自然“字”大小。但是,并非严格要求。如果您注意到,为了简化32位到64位代码转换,一些现代实现更喜欢将int
保留为32位类型,即使底层硬件平台具有64位字大小。
正如弗雷德里克已经指出的那样,无论如何,这个尺寸可能不会小于16个值形成位。
答案 2 :(得分:1)
最初的意图是int将是字大小 - 最有效的数据处理大小。然而,往往会发生大量代码,假设int的大小是X位,并且当代码运行的硬件移动到更大的字大小时,粗心编写的代码将会中断。编译器供应商必须保持他们的客户满意,所以他们说“好吧,我们将像以前一样保持大小,但我们现在会做大做多”。或者,“啊......太多人抱怨我们做得更长,我们将创建一个long long类型,同时留下sizeof(int)== sizeof(long)”。所以,现在,这一切都很糟糕:
ANSI C规范是否要求int的大小等于系统的字大小(32位/ 64位)?
这个想法很多,但并不坚持。
换句话说,我可以根据分配给int的空间来破译系统的字大小吗?
不在实践中。
答案 3 :(得分:0)
您应该检查系统提供的limits.h头文件。 INT_MAX声明应该帮助您反向计算整数必须具有的最小大小。有关详细信息,请查看http://www.opengroup.org/onlinepubs/009695399/basedefs/limits.h.html