是否有机器(或编译器), sizeof(char) != 1
?
C99 standard 是否认为标准合规实施的 sizeof(char)
必须正好为1?如果有,请给我部分编号和引文 .
更新:如果我有一台机器(CPU),它不能解决字节(最小读取是4个字节,对齐),但只有4-s的字节( uint32_t
),这台机器的编译器可以将sizeof(char)定义为4 ? sizeof(char)
将为1,但char将具有32位( CHAR_BIT
宏)
Update2:但是sizeof结果不是BYTES!这是CHAR的大小 . char可以是2个字节,或者(可能是)7位?
Update3:好的 . 所有机器都有 sizeof(char) == 1
. 但是什么机器 CHAR_BIT > 8
?
3 回答
它始终是C99第6.5.3.4节中的一个:
编辑:不是你的问题的一部分,而是来自Harbison和Steele,第3版的兴趣 . (前c99)p . 148:
编辑:在回答您更新的问题时,Harbison和Steele的以下问答是相关的(同上,第6章第4节):
答案(同上,第382页):
虽然这并没有专门解决这样一种情况:比如字节是8位而
char
是这些字节中的4个(实际上不可能用c99定义,见下文),sizeof(char) = 1
总是从c99标准和Harbison和Steele中清楚 .编辑:事实上(这是对你的upd 2问题的回应),就c99而言,
sizeof(char)
是以字节为单位,再次来自6.5.3.4节:因此结合上面的引用,8位字节和
char
作为这些字节中的4个是不可能的:对于c99,一个字节与char
相同 .在回答你提到7位
char
的可能性时:这在c99中是不可能的 . 根据该标准的5.2.4.2.1节,最小值为8:它们的实现定义值应与所示的值相等或更大[我的强调],具有相同的符号 .
[...]
没有
sizeof(char)
为4的机器 . 它是's always 1 byte. That byte might contain 32 bits, but as far as the C compiler is concerned, it'的一个字节 . 有关详细信息,我实际上会指向您C++ FAQ 26.6 . 该链接很好地涵盖了它,我相当肯定C从C获得了所有这些规则 . 对于大于8位的字符,您也可以查看comp.lang.c FAQ 8.10 .是的,它是字节 . 让我再说一遍 . 根据C编译器,
sizeof(char)
是1个字节 . 人们通俗地称之为字节(8位)的内容不一定与C编译器调用字节的内容相同 . C字节中的位数因机器架构而异 . 它也保证至少8 .PDP-10和PDP-11是 .
更新:没有像PDP-10那样的C99编译器 .
某些型号的ADI公司32位SHARC DSP的CHAR_BIT = 32,而TMS32F28xx的德州仪器DSP的CHAR_BIT = 16,reportedly .
更新:11701374,CHAR_BIT = 9(在该存档中检查include / limits.h) .