sizeof是否返回C中某个类型的字节数或八位字节数?

简单地放入C和变体(与wuss java及其虚拟机不同),不同目标上的基元类型的大小可能差异很大,除非你使用stdint.h定义的固定宽度类型,否则实际上无法保证,甚至你的实施必须支持他们。

无论如何假设(因为在大多数现代机器上,一个字节是八位字节,为了网络目的,我​​假设(ASCII))sizeof是以字节还是以八位字节的forms返回数据类型的大小?

答案: sizeof字节为单位返回类型的大小。


示例: sizeof(char) 100%保证为1 ,但这并不意味着它是一个八位字节(8位)。


标准certificate:

在6.5.3.4中,第2点:

sizeof运算符产生其操作数的大小(以字节为单位),该操作数可以是表达式或类型的带括号的名称。 大小由操作数的类型确定。 结果是整数。 如果操作数的类型是可变长度数组类型,则计算操作数; 否则,不评估操作数,结果是整数常量。

当应用于具有char,unsigned char或signed char(或其限定版本)类型的操作数时,结果为1 。 当应用于具有数组类型的操作数时,结果是数组中的总字节数。当应用于具有结构或联合类型的操作数时,结果是此类对象中的总字节数,包括内部和尾随填充。

另外,在第3.6节第3点:

一个字节由一个连续的位序列组成,其数量是实现定义的

sizeof以字节为单位给出大小。 但是,请注意“字节”是C标准中的技术术语,并且定义为sizeof(char) == 1

sizeof始终返回size作为字节数。 但根据维基百科 :

在编程语言C和C ++中,一元运算符sizeof用于计算任何数据类型的大小,以表示类型所需的字节数来度量。 此上下文中的一个字节与unsigned char相同, 并且可能大于8位,尽管这种情况并不常见

根据我自己的经验,使用具有异国情调的’C’编译器的嵌入式微控制器,我看到:

 sizeof( uint8 ) 

返回1

 sizeof( uint16 ) 

返回1

 sizeof( uint32 ) 

返回2

显然,我正在处理的机器是最小的可寻址实体是16位,所以sizeof不符合C89或C99。

我想说在主流的C89和C99兼容系统上,接受的答案是正确的。 不幸的是,“C”编译器仍然可以称为“C”编译器,即使它不符合25年前的标准。 我希望这个答案有助于把事情放在一边,给出更多奇特的系统。