每隔一段时间,就会有人在网上指出char
(aka 'byte') isn't necessarily 8 bits。
看起来8位char
几乎是通用的。我认为对于主流平台,有必要有一个8位的char
,以确保它在市场上的生存能力。
无论是现在还是历史上,哪些平台都使用非8位的char
,为什么它们会与“正常”的8位不同?
在编写代码并考虑跨平台支持(例如,对于通用库)时,对于使用非8位char
的平台,值得考虑哪些因素
在过去,我遇到过一些‘ve公司的DSP,其char
为16位。我认为DSP是一种小众的架构。(话又说回来,当时手工编写的汇编程序轻而易举地击败了现有的C编译器,所以我在那个平台上并没有获得多少使用C的经验。)
发布于 2010-01-20 09:23:00
在德州仪器的C54x DSP上,char
也是16位的,例如在OMAP2中出现的DSP。还有其他具有16位和32位char
的DSP。我想我甚至听说过24位DSP,但我不记得是什么了,所以可能是我想象出来的。
另一个考虑因素是POSIX强制使用CHAR_BIT == 8
。因此,如果您正在使用POSIX,您可以假定它。如果后来有人需要将您的代码移植到POSIX的近似实现中,恰好有您使用的函数,但char
的大小不同,这是他们的厄运。
不过,总的来说,我认为解决这个问题几乎总是比思考它更容易。只需输入CHAR_BIT
即可。如果您想要精确的8位类型,请使用int8_t
。你的代码将在没有提供实现的情况下编译失败,而不是静默地使用你不想要的大小。至少,如果我遇到了一个我有充分理由假设它的案例,那么我会断言它。
发布于 2010-01-20 09:02:13
看起来你仍然可以在仓库中使用buy an IM6100 (即芯片上的PDP-8 )。这是一个12位的架构。
发布于 2010-01-20 11:18:06
许多数字信号处理器芯片都有16位或32位char
。TI例行公事地制造这样的芯片for example。
https://stackoverflow.com/questions/2098149
复制相似问题