分类: LINUX
2013-04-12 10:21:43
1. key word from c++
inline –> __inline__
asm –> __asm__
这里在关键字前后加上"__"的原因是inline等c++的关键字不是c的关键字,为了避免冲突。
2. attribute属性描述
struct foo { char a; int x; }attribute__ ((packed));
比如上述代码就是压缩struct的存储方式,如果没有压缩就是8个BYTE,而packed之后是4BYTE。
3. do{}while(0)
为什么要用do{}while(0)呢?看下面这个例子:
如果使用:
上面的代码就变成了:
会有编译错误,那如果加上{}改成:
代码就变成:
同样会有编译问题。更糟糕的是在一些情况下虽然编译可以通过不过出现逻辑不一致的问题,而使用do{}while(0)就能解决这样的问题,所以当在宏中出现多条语句的时候就应该使用do{}while(0)。
3. list_head
在linux内核中,linux_head使用相当普遍,有许多地方对list_head做了详细的描述,这里就不赘述了,其核心是
通过list_head在struct中的偏移量找到当前struct的地址。