是否有真正的平台/编译器组合将int
定义为64位?或者这只是用来吓唬像我这样的新程序员使用int32_t
,其中大小很重要(例如保存到文件中)以使其“可移植”?
答案 0 :(得分:8)
绝对有这样的系统。未来可能会有更多(或可能没有)。你想打赌int
对可能的128位架构有何看法?
维基百科有一个不完整但有用的纲要:http://en.wikipedia.org/wiki/64-bit#64-bit_data_models
答案 1 :(得分:1)
我相信在c99中long long
通常是64位。 gcc和microsoft都使用这个约定。
答案 2 :(得分:0)
我知道在SGI 64位IRIX下,很久以前,long
类型声明了一个64位整数,除非你传递了-n32
标志并获得了32位代码。 Sun的解决方案是组成一个64位的long long
类型,并将long
保留为32位。旧的Apple Macintosh OS将int
视为16位。在漫游时,我可以指出char
在几个TI DSP上是16位。
除了long long
解决方案(因为它当时改变了语言的语法),所有这些都符合C标准。所以,是的,<stdint.h>
背后的理由是而不是只是一个恐怖的故事。它发生了。
答案 3 :(得分:0)
当然有些编译器有64位ints
。
int
通常是您的体系结构的自然字大小(即64位系统具有64位ints
,16位系统具有16位ints
等等)。
除非您知道变量需要32位,否则不应使用int32_t
,例如网络协议,二进制文件格式或硬件寄存器。如果在没有必要的情况下在64位计算机上使用int32_t
,则可能无缘无故地引入性能问题。由于int
是自然字大小,因此它往往也是最有效的数据类型。在RISC架构中尤其如此。
答案 4 :(得分:0)
如果您希望代码可移植,则可能需要长时间存储64位值。