在分析io_uring源码的时候发现了这个宏,稍微了解了一下
static int __init io_uring_init(void)
{
#define __BUILD_BUG_VERIFY_ELEMENT(stype, eoffset, etype, ename) do { \
BUILD_BUG_ON(offsetof(stype, ename) != eoffset); \
BUILD_BUG_ON(sizeof(etype) != sizeof_field(stype, ename)); \
} while (0)
该宏的具体实现为
#define BUILD_BUG_ON(condition) ((void)sizeof(char[1 - 2*!!(condition)]))
其作用是在编译的时候如果condition为真,则编译出错。即:如果condition为真,则!condition==0;!!condition==1;故编译器在编译char[1-2]时会出错。