c - 为什么 POSIX 要求 CHAR_BIT==8?

标签 c posix

在 POSIX 基本原理中有一个说明,强制 CHAR_BIT 为 8 是为了保持与 C99 的一致性而不丢弃套接字/网络所必需的让步,但我从来没有看到冲突到底是什么的解释。有没有人有轶事或引文说明为什么它被认为是必要的?

编辑:关于为什么希望 CHAR_BIT 为 8,我得到了很多推测性的答案,我同意,但我真正想要的是什么这就是 C99 和 POSIX 中的网络内容之间的技术冲突。我最好的猜测是它与 C99 有关,要求 uint*_t 是精确大小的类型(无填充),而 inttypes.h 以前在 POSIX 中没有这样的要求。

最佳答案

因为 ANSI 和 ISO 中的绝大多数标准(与通信相关)都使用八位字节(8 位值)进行交流。没有那种空洞的可变大小字符废话:-)

并且,由于相当多的 C 代码使用 charunsigned char 来存储和/或操作这些值,并假设它们是 8 位宽,事实上,ISO 允许可变大小会导致该代码出现问题。

请记住 ISO C 的首要目标之一 - 现有代码很重要,现有实现不重要。这就是为什么 limits.h 首先存在而不是仅仅假设特定值的原因之一,因为周围有其他假设的代码。

POSIX 也遵循相同的准则。通过规定 8 位的字节大小,他们防止了现实世界中已有的大量代码的破坏。

关于c - 为什么 POSIX 要求 CHAR_BIT==8?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6631491/

相关文章:

c - 一元++优先顺序

C For 循环不起作用?

java - 有没有所谓的自运行应用程序?

c - 如何在 Linux 上使线程超时?

c - 什么时候应该使用 mmap 进行文件访问?

c - 有没有办法用单个循环和 IPv6 套接字处理 getaddrinfo() 输出?

c++ - 确定目录中的文件

c++ - 是否可以将地址映射到函数的结果?

c - "undefined reference to function"C 中的错误取决于定义的位置

c - 帮助:wrong behavior code:client-server IPC signal handling on POSIX Message Queue UNIX C programming