C语言的黑暗角落: bit field
时间:2010-06-21 来源:slimzhao
C99中只说到bit field的类型为Bool 和 int(及unsigned int).
但gcc及VC中都可以用char, short来定义其类型, gcc的warning会对使用Bool和int之外的类型时报告警告:
warning: type of bit-field '' is a GCC extension
但gcc及VC中都可以用char, short来定义其类型, gcc的warning会对使用Bool和int之外的类型时报告警告:
warning: type of bit-field '' is a GCC extension
- 可以有unmaed bit-field, 这是标准C允许的, 目的是允许定义一些padding来迎合特定的布局.
- 可以有宽度为0的field, 明确的语意是结束对当前存储单元的使用, 让下一个bit field成员使用一个崭新的存储单元
- 如 struct A{ unsigned int a1: 7; unsigned int a2: 2; }; 这种情况, a1占用第一个字节中的7个bit, 只剩下一个bit, 对于a2的分配, 可以直接跳过这一个bit不用, 使用下一个存储单元(字节), 也可以使用上一个字节中的一个bit, 再用下一个存储单元中的一个bit来凑齐, 具体选择是由实现定义的.
- bit的使用顺序, 是最高位在前, 还是反之, 也是由实现定义的.
- 在bit field定义中, 只写int 等于只写char, 其是signed还是unsigned也是实现定义的, 所以在bit-field中应该总是写明signed int, unsigned int.
相关阅读 更多 +