我一直在读这样的句子

不要依赖1字节的大小为8位

使用CHAR_BIT而不是8作为常量在位和字节之间进行转换

等等.今天有什么样的现实系统,在哪里是正确的?

推荐答案

在较老的机器上,小于8位的代码相当常见,但其中大多数代码已经死了很多年了.

C and C++ have mandated a minimum of 8 bits for char, at least as far back as the C89 standard. [Edit: For example, C90, §5.2.4.2.1 requires CHAR_BIT >= 8 and UCHAR_MAX >= 255. C89 uses a different section number (I believe that would be §2.2.4.2.1) but identical content]. They treat "char" and "byte" as essentially synonymous [Edit: for example, CHAR_BIT is described as: "number of bits for the smallest object that is not a bitfield (byte)".]

然而,目前有一些机器(主要是DSP)的最小类型大于8位--最小类型为12位、14位甚至16位是相当常见的.Windows CE做了大致相同的事情:它的最小类型(至少用微软的编译器)是16位.然而,它们确实notchar视为16位--取而代之的是它们采取(不一致的)方法,根本不支持名为char的类型.

C++相关问答推荐

`__attribute__((destructor))` 在某些情况下没有运行?

我可以在同一个文件中使用 time.h 中的两个 tm 结构吗?

如何在 C 中的结构数组中使用动态二维数组?

如何判断作为参数传递的字符串是否是可修改的字符串

使用R的`.C`接口处理读/写文件

如何检测非 IEEE-754 浮点数,以及如何使用它们?

fork() - 多次调用子代码(相同的 PID)

HAL_UART_Transmit_IT 如何在 STM32F091VB 上管理串行发送数据

使用整数存储许多布尔值是否值得?

指针似乎与 printf 的输出不同步

union无法解码字节数组

以编程方式获取缓存行大小?

在结构数组的末尾需要空括号“{}”是什么?

如果缺少 const char* 数组初始化逗号,则生成编译器警告

对平方数字求和时是否需要明确处理负数或零?

为什么 C++ 初始分配比 C 大得多?

如何检测 C 代码(需要'extern C')是否在 C++ 中编译

防止控制台窗口在 Visual Studio C/C++ 控制台应用程序上关闭

“for”循环内的“for”循环可以使用相同的计数器变量名吗?

“使用带二进制位运算符的有符号整数操作数” - 使用无符号短时