在C语言中,对于32位机器和64位机器,long的大小是多少?

在C语言中,对于32位机器和64位机器,long的大小是多少?,c,long-integer,C,Long Integer,C中的long对于32位平台的大小为4字节,对于64位平台的大小为8字节,这是正确的吗?长的大小(通常是对象的大小)由C实现决定,而不是由平台程序在其上执行 一般来说,C实现是编译器加上运行C程序所需的库和其他支持软件。1一个平台可以有多个C实现。事实上,一个编译器可以通过使用不同的开关请求不同的配置来实现多个C实现 一般的C实现通常使用short、int和long的大小,这些大小与目标处理器模型(或多个模型)配合良好,并为程序员提供了良好的选择。但是,C实现可以为特殊目的而设计,例如支持用于特

C中的
long
对于32位平台的大小为4字节,对于64位平台的大小为8字节,这是正确的吗?

的大小(通常是对象的大小)由C实现决定,而不是由平台程序在其上执行

一般来说,C实现是编译器加上运行C程序所需的库和其他支持软件。1一个平台可以有多个C实现。事实上,一个编译器可以通过使用不同的开关请求不同的配置来实现多个C实现

一般的C实现通常使用
short
int
long
的大小,这些大小与目标处理器模型(或多个模型)配合良好,并为程序员提供了良好的选择。但是,C实现可以为特殊目的而设计,例如支持用于特定大小
long
的旧代码。一般来说,C编译器可以为它定义的任何大小的
long
编写指令

C标准对对象的大小施加了一些较低的限制。字符中的位数,
CHAR\u BIT
,必须至少为八位
short
int
必须能够表示−32767到+32767,且
long
必须能够表示−2147483647至+2147483647。它还要求
long
能够表示所有
int
值,
int
能够表示所有
short
值,
short
能够表示所有
signed char
值。除此之外,C标准规定的要求很少。它不要求
int
long
在特定平台上具有特定的大小。操作系统对编程语言内部发生的事情没有发言权。操作系统设置运行程序和与系统接口的要求,但是,在程序内部,软件可以做任何它想做的事情。因此,如果编译器愿意,它可以调用17位的
int
,而操作系统对此没有控制权

脚注
1 C 2011标准(草案N1570)在第3.12条中将实现定义为“在特定控制选项下的特定翻译环境中运行的特定软件集,该软件集为特定执行环境执行程序翻译,并支持在特定执行环境中执行功能。”

不。这取决于实施情况


唯一的规则是
char
必须是
char\u BIT
宽,并且大小必须是:
char通常,但不一定。如果需要固定大小的类型,请使用
int32\u t
int64\u t
long
的最小大小为32位,具体取决于特定平台
long
至少是32位,但通常是64位
int
至少为16位,并且其位数永远不会超过
long
。这些都是语言的保证。根据数据模型,它们有正式的名称。LLP64和LP64是常见的。C实现通常需要符合操作系统的ABI。@Barmar:操作系统是实现的一部分。如果是这样,那么32位操作系统=32位C,64位操作系统=64位C,对吗?@Barmar:不。出于实际目的,通用计算机是图灵完成的。这意味着您可以在任何通用计算机上执行任何计算(直到硬件的物理边界)。您可以在64位机器上编写16位
int
的C编译器,也可以在16位机器上编写64位
int
的C编译器。C标准不需要C实现来提供与操作系统的直接接口。它只需要标准的库例程,并且可以编写这些例程来执行操作系统所需的任何调整。我不这么认为。sizeof(char)定义为1。如果所有尺寸都是4的倍数,那就太奇怪了bytes@pm100:sizeof以字符数定义。不是字节。所以sizeof(char)总是1。即使是32位宽。@pm100请参见@pm100:C标准将字节定义为“可寻址的数据存储单元,其大小足以容纳执行环境基本字符集的任何成员”。C实现可能使用32位字节。@ZanLynx:还有其他规则
CHAR_位
必须至少为8位,实际上,
short
int
必须至少为16位,
long
必须至少为32位。