看内核代码时,有些语言成分或者说编程技巧平常没见过更没用过,这里先记下一些:
1. 关于保留字前后都加上“__”,比如__inline__,其实等价于inline。C语言支持一些属性描述符,而gcc同样支持不少这样的描述符,这些描述符的使用等于在C语言中增加了一些新的保留字,此时,原来的C语言中这些词可能并不是保留字,一旦老的代码中刚好有变量名与此描述符一样,就会冲突。为了解决这个问题,才有了前后的“__”。
2. 宏定义中,随处可见,"#define ... do{...}while(0)"这样的宏定义,乍一看,do while不是多此一举嘛。其实不然,举个例子:
fs/proc/kcore.c中有这样的定义:
#define DUMP_WRITE(addr,nr) do { memcpy(bufp,addr,nr); bufp += nr; } while(0)
如果,我们这么用这个宏: