C中变量大小的混淆

时间:2011-01-12 10:01:38

标签: c windows

  

可能重复:
  Any guaranteed minimum sizes for types in C?
  C/C++: Size of builtin types for various compilers/platforms

alt text  我有关于c语言的问题

在书中写的是int的大小,浮在c中的是一个单词ad 2 分别是。 这些单词是机器特定的。对于16位机器大小的单词是 16位,因此c中的int大小为16位,即2字节。

有人说c中int的大小是特定于操作系统的。因为 在Windows中,它给出的int的大小是2个字节,在linux的大小是int 4字节

有人说它是特定于编译器的,因为int的tc大小是2字节 对于gcc,它长4个字节

我是一台intel pentium双处理器(希望它是32位)和32位 os(显示在系统属性中),我正在使用tc 当我在c程序中显示int的大小时,它显示2个字节。但如果是的话 是机器或os依赖它应该显示4个字节长

我完全糊涂了。请帮我解决我的问题

(附:我的系统显示的计算机属性)

5 个答案:

答案 0 :(得分:3)

int的大小绝对是特定于平台的 - 通常在16位平台上是16位,在32位平台上是32位等。但是,它也是特定于编译器的:16位编译器将即使在32位平台上也可以创建16位int。然后,这些代码可以通过32位操作系统以特殊的向后兼容模式运行。

答案 1 :(得分:1)

我想我明白你在问什么。简而言之,int的大小由您使用的编译器定义。

传统上,对于给定的Unix平台,所有编译器都符合相同的“ABI”。这意味着int是一个int,并且“特定于操作系统”和“特定于编译器”之间没有区别。例如,如果调用open(),则编译器会直接调用内核open函数,返回值是从内核返回的int。

理论上,C库与操作系统脱节。您的编译器的int大小可能与计算机的本机字大小不同。例如,如果在WIN32上运行,则本机文件句柄为32位,但您的编译器可能具有16位或64位整数。在这种情况下,您可以将编译器的c库视为将您与操作系统字大小隔离开来的层。

答案 2 :(得分:1)

最正确的术语是“特定于实现”,这意味着操作系统Y的编译器X将对原始类型的大小有自己的想法。

因此,您可以在32位系统上使用2字节int。所有关于书中“单词”的长篇文章都是为了帮助你熟悉计算机的工作方式,它们并不是对C编译器必须如何实现的要求。

答案 3 :(得分:0)

stdint.h头文件具有固定大小的变量,例如int64_t, uint_16t,enc

答案 4 :(得分:0)

由语言标准(草案n1256,第5.2.4.2节)定义的每种类型都有最小值范围,它们确定最小位数。 char必须至少 8位宽,int必须至少 16位宽,float必须至少 32位宽等。编译器可能使用更宽的类型,但不能更窄。

要查看平台的类型大小,请查看标准标题limits.hfloat.h