可能重复:
Any guaranteed minimum sizes for types in C?
C/C++: Size of builtin types for various compilers/platforms
我有关于c语言的问题
有人说c中int的大小是特定于操作系统的。因为 在Windows中,它给出的int的大小是2个字节,在linux的大小是int 4字节
有人说它是特定于编译器的,因为int的tc大小是2字节 对于gcc,它长4个字节
我是一台intel pentium双处理器(希望它是32位)和32位 os(显示在系统属性中),我正在使用tc 当我在c程序中显示int的大小时,它显示2个字节。但如果是的话 是机器或os依赖它应该显示4个字节长我完全糊涂了。请帮我解决我的问题
(附:我的系统显示的计算机属性)
答案 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.h
和float.h
。