
正文
c++ 编译时检测结构体大小的的宏定义写法
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
一种写法:
template <bool>
struct CompileAssert {};#define COMPILE_ASSERT(expr, msg) \
typedef CompileAssert<(bool(expr))> msg[bool(expr) ? : -]} //endof namespace
第二种写法:
#define CAT_TOKEN_1(t1,t2) t1##t2
#define CAT_TOKEN(t1,t2) CAT_TOKEN_1(t1,t2) #define COMPILE_ASSERT(x) \
enum {CAT_TOKEN (comp_assert_at_line_, __LINE__) = / !!(x) }; #ifndef CHECK_SIZE
#define CHECK_SIZE(type, size) extern int sizeof_##type##_is_##size [!!(sizeof(type)==(size_t)size) - 1]
#endif//CHECK_SIZE #ifndef CHECK_OFFSET
#define CHECK_OFFSET(type, member, value) \
extern int offset_of_##member##_in_##type##_is_##value \
[!!(__builtin_offsetof(type,member)==((size_t)(value))) - ]
#endif//CHECK_OFFSET






