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) */