对于32位平台,C中的long
的大小为4字节,对于64位平台,为8字节是正确的吗?
答案 0 :(得分:1)
long
的大小(通常是对象的大小)由C实现决定,而不是平台程序在其上执行。
一般而言,C实现是编译器加上运行C程序所需的库和其他支持软件。 1 一个平台可以有多个C实现。实际上,一个编译器可以通过使用不同的开关来请求各种配置来实现多种C实现。
一般的C实现通常使用short
,int
和long
的大小,这些大小与目标处理器模型(或多个模型)很好地配合,并为程序员提供了很好的选择。但是,可以将C实现设计为特殊目的,例如支持旨在用于long
特定大小的旧代码。一般来说,C编译器可以针对其定义的long
大小编写指令。
C标准对对象的大小施加了一些较低的限制。字符CHAR_BIT
中的位数必须至少为八。 short
和int
必须能够表示从-32767到+32767的值,而long
必须能够表示从-2147483647到+2147483647的值。它还要求long
能够代表所有int
值,int
能够代表所有short
值,并且short
能够代表所有signed char
个值。除此之外,C标准没有什么要求。在特定平台上,不需要int
或long
为特定大小。操作系统对于编程语言内部发生的事情没有发言权。操作系统设置了运行程序和与系统连接的要求,但是,在程序内部,软件可以执行其所需的任何操作。因此,编译器可以根据需要将int
调用17位,而操作系统对此无权控制。
1 C 2011标准(草案N1570)在第3.12节中将实现定义为“在特定翻译环境中以特定控制选项运行的特定软件集,该特定软件在特定控制选项下执行翻译”。程序,并支持在特定执行环境中执行功能。”
答案 1 :(得分:1)
不。这取决于实现!
唯一的规则是char
必须是CHAR_BIT
宽,并且大小必须是:char <= short <= int <= long <= long long
,并且char
必须至少8位,{{1} }至少16位,short
至少32位,long
至少64位。
因此,实际上所有整数类型(长整型除外)都可以为32位宽,只要将long long
设置为32,C标准就可以了。