Chinaunix

标题: typedef问题 [打印本页]

作者: ahutwgs    时间: 2011-09-13 21:00
标题: typedef问题
我在《C专家编程》这本书的60页中看到这么一段:

结构中允许存在位段、无名子段以及字对齐所需的填充子段,这些都是通过在字段的声名后面加一个冒号以及表示字段位长的整数来实现的。

/×处理ID信息×/
struct pid_tag{
unsigned int inactice  :1;
unsigned int           :1;
unsigned int refcount  :6;
unsidned int :0;
short pid_id;
struct pid_tag *link;
};


不理解。。。。。。
希望高手们不吝赐教。
作者: KBTiller    时间: 2011-09-13 21:25
unsigned int inactice  :1;   unsigned int refcount  :6;   位段

unsigned int           :1;      无名子(字?)段  保证inactice  和 refcount  隔一位

unsidned int :0;    无名字段 用于对齐 pid_id
作者: KBTiller    时间: 2011-09-13 21:35
不过这和typedef没什么关系吧
标题很费解
作者: ahutwgs    时间: 2011-09-14 18:36
非常感谢楼上的帮忙,谢谢……

因为这个在书中的typedef声明中提到的,而且对这个也不是很理解,所以用这个作为标题也很无奈,请原谅。

这样的代码听说是“深入逻辑原件的编程”,请问这样的代码有什么意义,如果可能的话,写个实例参考下,不甚感激。

说明下,现在对深入逻辑原件的编程没有任何的接触。
作者: ahutwgs    时间: 2011-09-14 21:50
因为我想往嵌入式方向发展,第一阶段准备加强C语言功底,所以在再看《C语言专家编程》,我再查下关于这方面的资料,谢谢……
作者: ahutwgs    时间: 2011-09-15 14:58
位段:在一个结构体中以位为单位来指定其成员所占内存长度,这些成员称为“位段”或“位域”。
一个字节分段赋值或改变值的方法
(1)人为方法:进行移位、与、或、非运算
(2)位段结构体方法:
e.g.  struct packed_data
     { unsigned a:2;
       unsigned b:3;
       unsigned c:4;
       int i;
     }data;
    data.a=2;    //成员变量赋值
注意:(1)位段成员类型必须为unsigned或int型;
      (2)若某一位段要从另一字节开始存放,前面加入 unsigned :0;
       (3) 可以定义无名字段,如 unsigned :2;
作者: KBTiller    时间: 2011-09-15 20:17
“深入逻辑原件的编程”?
没那么玄吧
不过就是数据存储的紧凑一些而已
写代码比用位运算更好写一些
作者: x5miao    时间: 2011-09-15 21:18
回复 7# ahutwgs


    位字段还可以是_BOOL与编译器扩展类型




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2