Feeds:
文章
评论

Archive for 四月 20th, 2010

比如比较两个数的大小 : 一般我们都习惯了这样写: #define MAX(a,b) (((a)>(b))?(a)b)) //实际上宏参数计算两次 可是宏是有副作用的, 比如下面这个例子: MAX(a++,b) 又如何呢? 所以kernel里面的gcc扩展提供了很好的办法: #define MAX_CHECK(x,y) \ //宏参数仅仅计算一次 ({ \ typeof(x) __x = (x); \ typeof(y) __y = (y); \ (void) (&__x == &__y); \ (__x>__y) ?__x:__y ;\ })注意上面的是语句表达式(就是 用() 括起来) , 当if(MAX_CHECK(10,20) ) 是没有副作用的。 typeof 是个宏, 取出变量的类型 当然上面的宏 按照kernel里面的写法也可以写成这样: #define MAX_CHECK2(x,y) \ do{ \ typeof(x) __x [...]

Read Full Post »

Follow

Get every new post delivered to your Inbox.