宏定义如下:
#define BUILD_BUG_ON_ZERO(e) (sizeof(struct { int:-!!(e); }))
这个函数也就是在检查e是否是0,如果不是0则编译时候报错。
分析:
!!(e): a)e不为0的时候,结果是1;
b)e为0的时候,结果是0;
struct { int:-!!(e);}:a)e不为0的时候,为int:-1;
b)e为0的时候,为int:0;
sizeof( struct { int:-!!(e);} ):a)为int:-1则编译时候报错;
b)为int:0时候编译没问题;
这样就可以检查e是否是0了