我有一个关于c语言的问题
在书中,整数的大小,c中的浮点数分别是一个词和两个词。这些词是机器特有的。对于16位机器来说,字的大小是16位,所以c中int的大小是16位,即2字节。
有人说c中int的大小是特定于操作系统的。因为在windows中,int的大小为2字节,而在linux中,int的大小为4字节。
有人说它是编译器专用的,因为int的tc大小是2字节,gcc是4字节长的。
我的是intel pentium双处理器(希望是32位)和32位os (显示在系统属性中),我在c程序中显示int的显示大小时使用tc,它显示了2个字节。但是,如果它依赖于机器或os,则应该显示4字节长。
我完全糊涂了。请帮我解决我的问题
(附件:我的系统的属性由计算机显示)
发布于 2011-01-12 02:11:00
int
的大小绝对是特定于平台的--通常是16位平台上的16位,32位平台上的32位等等。然而,它也是编译器特有的:即使在32位平台上,16位编译器也会创建16位int
。这样的代码可以通过32位操作系统在一个特殊的向后兼容模式下运行.
发布于 2011-01-12 02:45:20
我想我明白你的要求了。简而言之,int的大小是由您正在使用的编译器定义的。
传统上,对于给定的Unix平台,所有编译器都遵循相同的"ABI“。这意味着int是int,在“操作系统特定”和“编译器特定”之间没有区别。例如,如果调用open(),编译器实际上调用内核open函数,返回值是从内核返回的int。
从理论上讲,C库与操作系统是分离的。编译器的int大小可能与机器的本机字大小不同。例如,如果您在WIN32上运行一个本地文件句柄是32位,但是您的编译器可能有16位或64位的ints。在这个场景中,您可以将编译器的c库看作一个将您与操作系统字大小隔离开来的层。
发布于 2011-01-12 02:52:44
最正确的术语是“特定于实现”,这意味着用于操作系统Y的编译器X将对原语类型的大小有自己的概念。
所以你可以在32位系统上使用2字节的int
.书中所有关于“单词”的长篇文章都是为了让你熟悉计算机是如何工作的,它们并不是对如何实现C编译器的要求。
https://stackoverflow.com/questions/4667431
复制