简单地放入C和变体(与wuss java及其虚拟机不同),不同目标上的基元类型的大小可能会有很大差异,除非您使用{{1}中定义的固定宽度类型,否则实际上无法保证即使这样你的实现也必须支持它们。
无论如何假设(因为在大多数现代机器上,一个字节是八位字节,为了网络目的,我假设(ASCII))sizeof是否以字节或八位字节的形式返回数据类型的大小?
答案 0 :(得分:18)
答案:sizeof
以字节返回类型的大小。
示例:sizeof(char)
100%保证为1
,但这并不意味着它是一个八位字节(8位)。
标准证明:
6.5.3.4中的,第2点:
sizeof运算符产生其操作数的大小(以字节为单位),可能是 表达式或类型的括号名称。大小由类型确定 操作数。结果是整数。如果操作数的类型是可变长度数组 type,操作数被评估;否则,不评估操作数,结果是 整数常数。
...
当应用于具有char,unsigned char或signed char类型的操作数时, (或其合格版本)结果为1 。应用于具有数组的操作数时 type,结果是数组中的总字节数)当应用于操作数时 具有结构或联合类型,结果是这样一个对象的总字节数, 包括内部和尾部填充。
此外,在第3.6节,第3点:
一个字节由一个连续的位序列组成,其数量是实现定义的
答案 1 :(得分:6)
sizeof
给出大小(以字节为单位)。但请注意,“byte”是C标准中的技术术语,并且定义为sizeof(char) == 1
。
答案 2 :(得分:5)
sizeof
总是返回大小作为字节数。但根据wikipedia:
在编程语言C和C ++中,一元运算符sizeof用于计算任何数据类型的大小,以表示类型所需的字节数来衡量。此上下文中的一个字节与无符号字符相同,并且可能大于8位,但这并不常见。
答案 3 :(得分:2)
根据我自己的经验,致力于嵌入式微控制器与异国情调的C'编译器,我看到了:
sizeof( uint8 )
返回1
sizeof( uint16 )
返回1
sizeof( uint32 )
返回2
显然,我正在处理一台机器,最小的可寻址实体是16位,所以sizeof不符合C89或C99。
我会说主流C89&符合C99标准的系统,接受的答案是正确的。 不幸的是," C"编译器仍然可以被称为" C"编译器,即使它不符合25年的标准。我希望这个答案有助于把事情放在一边,给出更多奇特的系统。