转载至 http://bbs.chinaunix.net/thread-2087578-1-1.html
内核中由以下代码:
#define container_of(ptr, type, member) ({ \
const typeof( ((type *)0)->member ) *__mptr = (ptr); \
(type *)( (char *)__mptr - offsetof(type,member) );})
这种定义中的临时变量的意义在于多了类型检查。
这是GCC的扩展
在GNU中, 通过在一个复合语句外加一对圆括号, 可以产生一个返回值. 如下面的表达式就返回8:
返回的值就是语句块中的最后一个语句的返回值.
这种结构在写宏的时候很有用. 比如
这是对x取整的. 如果在调用时使用even(i++)这种方式的话, 则会得出错误的结果.
但是如果使用下面的方法:
这样的话, 使用even(i++)也可以得到正确的结果.