为什么C编译器指定长为32位,长为64位?

sj7*_*755 10 c bit 32bit-64bit long-long long-integer

在128位数字变为现实之前,长64位并保留很长时间是不是更有意义?

Mys*_*ial 12

是的,它确实有意义,但微软有自己的理由将"长"定义为32位.

据我所知,在目前所有主流系统中,Windows是唯一一个"长"为32位的操作系统.在Unix和Linux上,它是64位的.

Windows的所有编译器都将在Windows上"长"编译为32位,以保持与Microsoft的兼容性.

因此,我避免使用"int"和"long".偶尔我会使用"int"表示错误代码和布尔值(在C中),但我从不将它们用于任何依赖于类型大小的代码.

  • 在32位足够大的情况下我使用`long`,我不想在我的代码中使用`int32_least_t`或我自己的typedef.最好是使依赖变得明显和明确,如果它在一个结构中,你可能会使用`int32_t`来避免膨胀它在'long`更大的地方,但确实有一点"不能被打扰这个". (2认同)
  • 许多嵌入式设备(2015 年每年数十亿台)使用 32 位 `long`。几乎没有“所有主流系统......它是 64 位的”。 (2认同)

小智 5

c标准没有指定原始数据类型的位长度,但只指定了它们的最小位长度.因此编译器可以选择原始数据类型的位长度.在确定每个原始数据类型的位长时,编译器设计者应该考虑几个因素,包括计算机体系结构.

这里有一些参考文献:http: //en.wikipedia.org/wiki/C_syntax#Primitive_data_types