3

我正在考虑一个非常特殊的(现在无用的)处理器,称为saturn

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

有一次尝试为 Saturn 创建 C 编译器:hp48xgcc

查看它的文档,我注意到它的基本类型遵循通常的 GCC 约定,字符为 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 的含义?

4

2 回答 2

11

不,根据 C99 标准,CHAR_BIT 最小值为 8(顺便说一句,C89/90 也是如此)。

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

5.2.4.2.1 整数类型的大小

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

— 不是位域的最小对象的位数(字节)

CHAR_BIT 8

于 2013-08-30T16:44:14.023 回答
5

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

于 2013-08-30T16:43:03.997 回答