在读每cpu页框高速缓存时,看到如下代码:
static inline
struct page *buffered_rmqueue(struct zone *preferred_zone,
struct zone *zone, int order, gfp_t gfp_flags,
int migratetype)
{
int cold = !!(gfp_flags & __GFP_COLD);
此处为何使用!!呢?
-----------------------------------------------------------------------------
据说c/c++编译器是这样认为:0为false,1为true,也认为非0(除1外)也为true,非非0为0,非非非0为1。至于为什么做!!(x)处理,我感觉应该是防治类型转换时数据截断导致错误。比如说: if()里面的参数为int,但是x 为 long,假设x为0x11111111 00000000,按理说为true,但是if(x)的时候,可能截断成全0了,如果if(!!(x))就不会出错了吧。