GCC编译器一个字节中有多少位数

时间:2019-03-26 11:23:30

标签: c++ gcc

根据C ++规范

  

一个字节至少大到足以包含基本的任何成员   执行字符集(2.3)和8位代码单元   Unicode UTF-8编码形式,由连续序列组成   的位数,其数量由实现定义。

这意味着一个字节中的位数必须为8位或大于8位。

现在,根据gcc,位数由ABI确定。

https://gcc.gnu.org/onlinedocs/gcc-5.4.0/gcc/Characters-implementation.html#Characters-implementation

4.4个字符

一个字节(C90 3.4,C99和C11 3.6)中的位数。

由ABI确定

GCC基于ABI-http://itanium-cxx-abi.github.io/cxx-abi/

谁能指出我提到字节中位数的位置?

2 个答案:

答案 0 :(得分:4)

C ++标准(因此是大多数编译器)实际上仅保证char至少 8个连续位。对于任何特定的编译,实际位数取决于目标CPU架构。

但是,在大多数情况下,您将不得不努力找到不具有8位字节的目标CPU。

如果您必须编写依赖于8位字节的假设的代码,则始终可以static_assert(CHAR_BIT == 8)来防止任何违反假设的编译。

答案 1 :(得分:4)

  

谁能指出我提到字节中位数的位置?

从本质上讲不是。该特定的ABI始终使用“字节”代替“八位字节”;在现代时代,“字节”是“八位字节”的常见同义词,因为使用的绝大多数系统都具有8位字节。

它确实是这样说的:

  

通常,本文档是作为通用规范编写的,可用于各种体系结构上的C ++实现。但是,它确实包含用于Itanium 64位ABI的特定于处理器的材料,因此已确定。在描述结构化数据布局的地方,我们通常采用Itanium psABI成员大小。

...并且Itanium芯片都具有8位字节。

如果您正在使用其他芯片,并且每个字节具有不同的位数,并且找到了针对该芯片的编译器,那么您将拥有替代答案。 (但这不是,您也没有。)

即使没有明确说明位和字节之间的关系,这里实际上也没有解释的空间。

如果我感到特别偏执,我会偶尔static_assert(CHAR_BIT == 8)。总体而言,除非您的目标不是真正的异国情调,否则您都可以依靠它。