long int (据我所知,它是long的同义词)总是4字节吗?
我能依赖这个吗?如果不是,基于POSIX的操作系统会是真的吗?
发布于 2016-03-07 13:11:13
除了char之外,这些标准没有提到任何整数类型的确切大小。通常,32位系统上的long是32位,64位系统上是64位.
但是,标准确实指定了最小大小。来自C标准 5.2.4.2.1节
1下列数值应由适合于
#if预处理指令的常量表达式取代。此外,除CHAR_BIT和MB_LEN_MAX外,以下内容应替换为具有与根据整数提升转换的相应类型的对象的表达式相同类型的表达式。其实现定义的值应等于或大于所示值(绝对值),并具有相同的符号。。 ..。
long int类型对象的最小值
LONG_MIN -2147483647 //−(2^31−1)long int类型对象的最大值
LONG_MAX +2147483647 // 2^31−1这意味着long int必须至少为32位,但可能更大。在CHAR_BIT为8的机器上,最小字节大小为4。但是,在机器上,例如CHAR_BIT等于16时,long int可以是2字节长。
这是一个现实世界的例子。关于下列代码:
#include <stdio.h>
int main ()
{
printf("sizeof(long) = %zu\n", sizeof(long));
return 0;
}在Debian 7 i686上的输出:
尺寸(长)=4
CentOS 7 x64上的输出:
尺寸(长)=8
所以不,你不能对尺寸做任何假设。如果需要特定大小的类型,可以使用stdint.h中定义的类型。它定义了以下类型:
int8_t:签名8位uint8_t:无符号8位int16_t:签名16位uint16_t:无符号16位int32_t:签名32位uint32_t:无符号32位int64_t:签名64位uint64_t:无符号64位标准的7.20节描述了stdint.h标头,7.20.1.1节中有精确的宽度类型。标准声明这些类型防御是可选的,但它们存在于大多数实现中。
发布于 2016-03-07 13:12:46
不,无论是C标准还是POSIX都不能保证这一点,实际上大多数类似Unix的64位平台有64位(8字节) long。
发布于 2016-03-07 13:12:13
使用代码sizeof(long int)并检查大小。它将给出您当前工作的系统上长int的大小(以字节为单位)。你的问题的答案是否定的。它在C或POSIX或任何地方都没有得到保证。
https://stackoverflow.com/questions/35844586
复制相似问题