Mat*_*ner 1 c compiler-construction portability void-pointers pointer-arithmetic
如何以单字节精度可移植地执行指针运算?
请记住:
char
在所有平台上都不是1个字节sizeof(void) == 1
仅作为GCC的扩展名提供caf*_*caf 19
你的假设是有缺陷的- sizeof(char)
被定义为1无处不在.
根据C99标准(TC3),在6.5.3.4节("尺寸操作员")中:
(第2段)
sizeof运算符产生其操作数的大小(以字节为单位),该操作数可以是表达式或类型的带括号的名称.
(第3段)
当应用于具有char,unsigned char或signed char(或其限定版本)类型的操作数时,结果为1.
当这些结合在一起时,很明显在C中,无论char的大小是多少,该大小都是"字节"(即使在某个给定平台上超过8位).
char
因此,A 是最小的可寻址类型.如果需要以小于a的单位进行寻址char
,则唯一的选择是char
一次读取一个并使用按位运算符来屏蔽所需的部分char
.
归档时间: |
|
查看次数: |
3089 次 |
最近记录: |