编译时检查sizeof

2018-07-08  本文已影响0人  柯蒂斯罗西

需求:在编译时检查struct数据结构的大小

思路a:预编译时检测,不一定支持sizeof,且数据结构类型未知。

思路b:运行时检测,效率问题。

思路c:在编译时检测。


编译时检测

Linux内核(在include/linux/kernel.h)里面已经有相关的macro解决这个问题。

#define BUILD_BUG_ON(condition) ((void)sizeof(char[1 - 2*!!(condition)]))

我们可以改装此宏定义:

#define BUILD_BUG_ON(condition) ((void)sizeof(char[condition? 1:-1])) 

具体的原理是:(void)1,这个语句即使使用了 -Wall的编译参数,也不会有警告;

因此,BUILD_BUIG_ON这个宏展开后等效于

(void)sizeof(char[1])

(void)sizeof(char[-1])

上一篇下一篇

猜你喜欢

热点阅读