BUILD_BUG_ON()
在编译时调用,可以提前发现错误,这里利用了一些不常用的特性,当数组个数元素为负时会发生编译器错误,对于位域宽度而言,其为负数时也会发生编译器错误。
1 #define BUILD_BUG_ON_ZERO(e) (sizeof(struct{int : -!!(e);})) 2 #define BUILD_BUG_ON_NULL(e) ((void*)sizeof(struct{int : -!!(e);})) 3 4 #define BUILD_BUG_ON(condition) ((void)BUILD_BUG_ON_ZERO(condition)) 5 6 #define MAYBE_BUILD_BUG_ON(condition) ((void)sizeof(char[1 - 2 * !!(condition)]))