可能重复: What does a colon in a struct declaration mean, such as :1, :7, :16, or :32?
这是参考页面的C代码示例。
signed int _exponent:8;
在'8'和'8'之前结肠的含义是什么?
这是一个位域。它仅在struct
定义中有效,这意味着系统将仅使用8位作为整数。
它是一个位域,一个模糊和错误的结构特征。这应该足以让您查找需要知道的信息来处理其他人代码中的位域。至于你自己的代码,永远不要使用位域。
编辑:根据Zack的要求,位字段与执行自己的位算术相比具有明显的缺点,没有任何优势。这里是其中的一些:
对于单比特标志,使用您自己的比特算术而不是位域是一个完全明智的选择。对于较大的值,您需要打包,如果在整个地方写出所有位算术太痛苦,请编写一些简单的宏。
这是bitfield规范。
这意味着_exponent
仅从8
中获取signed int
位,这通常需要超过8
位。通常,位字段与无符号类型一起使用。
IIRC,如果一个不适合8位的东西写入_exponent
,编译器会发出警告。
当该陈述在结构内时,意味着bit fields。