内核代码宏的问题(kernel.h)

木兰宿莽 发布于 2016/03/09 17:06
阅读 136
收藏 0
在kernel.h中看到了一个这样的宏#define BUILD_BUG_ON_ZERO(e) (sizeof(struct { int:-!!(e); }))   有知道是什么意思的吗?
加载中
1
如比如比
如比如比
其中当e为非0的时候,经过两次非操作得到的结果是1,加上符号就是-1,这样在编译的时候就会报错,因为int只有32位而-1明显大于32.反过来当e=0的时候,经过两次非操作仍然是0,-0的结果还是0.这样可以在编译的时候发现错误。
0
如比如比
如比如比
用位域来强制编译器检查
木兰宿莽
木兰宿莽
给我讲讲?
0
如比如比
如比如比
#define BUILD_BUG_ON(condition) ((void)BUILD_BUG_ON_ZERO(condition))
#define BUILD_BUG_ON_ZERO(e) (sizeof(struct { int:-!!(e); }))
int
main(int argc, char **argv)
{BUILD_BUG_ON(1 == 1);
        return 0;
}
0
如比如比
如比如比

引用来自“_茶壶”的评论

#define BUILD_BUG_ON(condition) ((void)BUILD_BUG_ON_ZERO(condition))
#define BUILD_BUG_ON_ZERO(e) (sizeof(struct { int:-!!(e); }))
int
main(int argc, char **argv)
{BUILD_BUG_ON(1 == 1);
        return 0;
}
这是个测试的例子
木兰宿莽
木兰宿莽
明白了,谢谢
返回顶部
顶部