我一直在读这样的句子

不要依赖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++相关问答推荐

标准的C17标准是用括号将参数包装在函数声明中吗

如何将已分配的数组(运行时已知的大小)放入 struct 中?

无效指针值在函数调用之间莫名其妙地改变

是否所有C编译器在将浮点数转换为整型数时都会隐式删除小数?

将数据移动到寄存器时出现分段故障

在基本OpenGL纹理四边形中的一个三角形中进行渲染

这个计算C中阶乘的函数正确吗?

GTK函数调用将完全不相关的char* 值搞乱

cairo 剪辑区域是否存在多个矩形?

编译器如何处理具有更复杂值的枚举?

如何使用libgpio(d)为Raspberry Pi编译C程序?

GetText不适用于包含国际字符的帐户名称

从整型转换为浮点型可能会改变其值.

生成的头文件不包括用户定义的文件

如果类型是新的,offsetof是否与typeof一起工作?

哪些C++功能可以在外部C块中使用

既然我们在 if 中将 int 的值更改为 10,为什么在第二个 fork 后,子进程及其创建的子进程都会打印 33 ?

函数的typedef是标准 C 语法吗?它与函数指针的typedef有何不同?

memcmp 是否保证按顺序比较字节?

使用共享变量同步多线程 C 中的函数