CHAR_BIT = 4是C标准授权的可能值吗?

我正在考虑一个非常具体的(现在无用的)处理器,称为土星 。

该CPU的一个奇怪特性是它的元素单位是半字节(4位),而不是字节(8位)。 它不仅仅是装饰性的,任何指针值都以半字节表示。

有一次尝试为土星创建一个C编译器: hp48xgcc

看一下它的文档 ,我注意到它的基本类型遵循通常的GCC约定,使用char 8位。 此时,我想知道:CHAR_BIT是否有意提供元素单元的大小? GCC自己的文档似乎暗示了这一点:

You can compute the number of bits in any data type like this: sizeof (type) * CHAR_BIT 

在这种情况下,考虑到Saturn架构,最好让CHAR_BIT = 4

或者我是否误解了CHAR_BIT的含义?

根据C99标准, CHAR_BIT最小值为8 (BTW,对于C89 / 90也是如此)。

C99标准草案(WG14 / N1256)的相关部分如下:

5.2.4.2.1整数类型的大小

下面给出的值应替换为适用于#if预处理指令的常量表达式。 此外,除了CHAR_BIT和MB_LEN_MAX之外,以下内容应替换为与根据整数提升转换的对应类型的对象的表达式具有相同类型的表达式。 它们的实现定义值的大小(绝对值)应等于或大于显示的值,具有相同的符号。

– 不是位字段(字节)的最小对象的位数

CHAR_BIT 8

在所有支持C89标准或更高版本的编译器上,CHAR_BIT保证至少为8位。