【发布时间】:2016-06-21 01:16:36
【问题描述】:
long int(据我所知是long 的同义词)总是4 字节吗?
我可以依赖它吗?如果不是,那么对于基于 POSIX 的操作系统来说是不是真的?
【问题讨论】:
-
只是提醒大家
sizeof考虑了填充和对齐。具有 8 个字节的sizeof(unsigned long)是符合标准的,但溢出的行为类似于 4 个字节。尝试使用sizeof和CHAR_BITS来计算整数类型的限制是错误的。在应该使用的时候使用limits.h。 -
你真的应该阅读(先删节,然后是完整版)C-faq,它起源于 Usenet,当时它是人们的地方一个主题的知识聚集在同一个地方(现在,它在几个站点中很普遍......),因此它导致了令人难以置信的详尽和出色的常见问题解答。见c-faq.com/versions.html。阅读它可以让您大开眼界,了解更多您可能甚至不知道您需要了解的问题(第 5 节 - 空指针 - 包含常见问题解答,我很震惊(并且很感激)发现)
-
不,我的电脑上是 8
-
在大多数 64 位系统(例如 x86-64 Linux 和 OS X)上是 8。 Windows 是主要的例外,因为为 32 位 Windows 编写的大量代码都是为 32 位 Windows 编写的,几乎没有努力编写没有假设的可移植代码。同样出于 ABI 的原因:我认为某些结构的定义中有
longs,但它们不需要是 64 位的。因此,MS 决定将long设为 32 位,以保持其 ABI 和现有代码库中的结构大小相同。