C 技巧

位操作

status |=  flags  /*设置标记*/

status &= ~flags /*清除标记*/

status & flags    /*判断标记*/

 

循环:

do {} while(0) 方便从代码中退出( break; 不需要使用 goto)

for(;;)  死循环;

 

gcc 扩展

struct file_operator file_op = {.open = my_open}; 

.open 是这种在 struct中部分初始化,可以省去大对象的初始化的麻烦。

__attribute__(packed) 帮助设置对齐为0,这样可以减少空间浪费,或满足 cacheline 的大小要求。

 

原子操作

 

++jiffiers; /*可能是多个指令来保证 jiffiers 递增, movl (jiffiers), eax,  inc eax, mov eax, (jiffiers)*/

++(*(unsigned long *)(&jiffiers)); /* gcc 会编译成一个原子操作的指令来完成递增,

比如 inc (jifffiers) */

posted @ 2010-01-14 15:16  napoleon_liu  阅读(344)  评论(1编辑  收藏  举报