在读每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))就不会出错了吧。
本文深入探讨了C/C++编译器如何处理布尔运算符,特别是双目运算符的非操作(!!)。通过具体实例解释了编译器将整型值转换为布尔值的过程,并讨论了这种转换可能导致的问题及其解决方案。
&spm=1001.2101.3001.5002&articleId=8202377&d=1&t=3&u=67db16dd17354addae641352ca8c5da7)
6794

被折叠的 条评论
为什么被折叠?



