31

我知道 C/C++ 标准只保证每个字符至少8 位,理论上 9/16/42/其他任何东西都是可能的,因此所有关于编写可移植代码的网站都警告不要假设 8bpc。我的问题是这到底有多“不可移植”?

让我解释。在我看来,系统分为 3 类:

  1. 计算机——我的意思是台式机、笔记本电脑、服务器等,运行 Mac/Linux/Windows/Unix/*nix/posix/whatever(我知道这个列表并不完全正确,但你明白了)。如果听到任何char完全是8 位的系统,我会感到非常惊讶。(如果我错了请纠正我)
  2. 带有操作系统的设备- 这包括智能手机和此类嵌入式系统。虽然我不会很惊讶发现这样一个char超过 8 位的系统,但迄今为止我还没有听说过一个(再次,如果我不知道,请告诉我)
  3. 裸机设备——录像机、微波炉、旧手机等。在这个领域我没有半点经验,所以在这里什么都有可能发生。但是,我真的需要我的代码在我的 Windows 桌面和微波炉之间跨平台吗?我有可能拥有两者共同的代码吗?

底线:是否有不是 8 位的常见(超过 %0.001)平台(在上面的类别 1 和 2char?我的上述猜测是真的吗?

4

4 回答 4

27

使用限制.h

CHAR_BIT

http://www.cplusplus.com/reference/clibrary/climits/

此外,当您想使用给定的大小时,请使用 stdint.h

于 2012-07-22T12:53:21.813 回答
6

例如,许多DSPCHAR_BIT大于或等于 16。

于 2012-07-22T12:56:00.530 回答
4

至少,类似于 64 位架构中的整数大小,未来的平台可能会使用更宽的 char,具有更多位。ASCII 字符可能会过时,取而代之的是 unicode。这可能是一个原因,所以要小心。

于 2012-07-22T12:45:43.393 回答
0

您通常可以安全地假设文件将具有 8 位字节,或者如果没有,则可以通过常用工具将 8 位字节文件转换为零填充的本机格式。但假设 CHAR_BIT == 8 会更加危险。目前几乎总是如此,但未来可能并非总是如此。对内存的 8 位访问越来越成为一个瓶颈。

于 2017-02-24T17:38:28.963 回答