/* 条件cond为真就编译报错且打印msg指定的信息 */#define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg)/* 只要代码被编译住了,就报错 */#define BUILD_BUG() BUILD_BUG_ON_MSG(1, "BUILD_BUG failed") 使用举例: //kernel中使用:#define OEM_DATA_SIZE_ASSERT(oem_struct, k_s...
BUILD_BUG_ON:只有条件condition为0时可编译,但不返回值,否则编译器报错。 BUILD_BUG_ON_ZERO:只有条件e为0时返回0,否则编译器报错。 当我们调试完代码后,建议关闭这个宏,可以使用另一个宏定义来使能/关闭BUILD_BUG_ON 宏。
e.g. in a structure initializer (or where-ever else comma expressions aren't permitted). */#defineBUILD_BUG_ON_ZERO(e)(sizeof(struct{int:-!!(e);}))#defineBUILD_BUG_ON_NULL(e)((void*)sizeof(struct{int:-!!(e);})) 分析第一个,它表示的是:检查表达式e是否为0,为0编译通过且返回0...
}; BUILD_BUG_ON(MAX_ORDER > S8_MAX); BUILD_BUG_ON(DEF_PRIORITY > S8_MAX); BUILD_BUG_ON(MAX_NR_ZONES > S8_MAX); /* 当zonelist中获取到的第一个node平衡,则返回,如果获取到的第一个node不平衡,则将当前进程加入到pgdat->pfmemalloc_wait这个等待队列中 * 这个等待队列会在kswapd进行内存回收...
BUILD_BUG_ON宏中的condition如果为真就会报错。假设条件为真,则BUILD_BUG_ON变化为:(void) sizeof (char[-1]),这种语法是在难理解,因为char[-1]本来就是非法的。结果导致编译错误。 例子: #define condition 0 static int __init main_init(void) ...
BUILD_BUG_ON_ZERO:只有条件e为0时返回0,否则编译器报错。 总结:BUILD_BUG_ON和BUILD_BUG_ON_ZERO作用类似,都是在参数为非0时编译报错,但是BUILD_BUG_ON_ZERO可以返回0值,BUILD_BUG_ON不可。编译器警告的格式如下,这与char[-1]的错误定义相一致。如果不熟悉它,那么将很难根据警告找到出错的真正位置: ...
elseif(ctl_len){BUILD_BUG_ON(sizeof(structcmsghdr)!=CMSG_ALIGN(sizeof(structcmsghdr)));if(ctl_len>sizeof(ctl)){//注意用户数据的size必须大于44字节ctl_buf=sock_kmalloc(sock->sk,ctl_len,GFP_KERNEL);//sock_kmalloc最后会调用kmalloc 分配 ctl_len 大小的堆块if(ctl_buf==NULL)gotoout_free...
* Contrary to BUILD_BUG_ON(), static_assert() can be used at global * scope, but requires the expression to be an integer constant * expression (i.e., it is not enough that __builtin_constant_p() is * true for expr). *
(PMD)项pmd=fixmap_pmd(addr);__pmd_populate(pmd,__pa_symbol(bm_pte),PMD_TYPE_TABLE);BUILD_BUG_ON((__fix_to_virt(FIX_BTMAP_BEGIN)>>PMD_SHIFT)!=(__fix_to_virt(FIX_BTMAP_END)>>PMD_SHIFT));if((pmd!=fixmap_pmd(fix_to_virt(FIX_BTMAP_BEGIN)))||pmd!=fixmap_pmd(fix_to_virt...
(2)AC_INIT宏用来定义软件的名称和版本等信息,”FULL-PACKAGE-NAME”为软件包名称,”VERSION”为软件版本号,”BUG-REPORT-ADDRESS”为BUG报告地址(一般为软件作者邮件地址)。 (3)AC_CONFIG_SRCDIR宏用来侦测所指定的源码文件是否存在,来确定源码目录的有效性。此处为当前目录下的app.c。