方法一:
#ifndef STATIC_ASSERT
#define STATIC_ASSERT(exp) ((void)sizeof(struct{int:-!(exp);}))
#endif
方法二:
#ifndef STATIC_ASSERT
#define STATIC_ASSERT(exp) ((void)sizeof(char[(exp)?1:-1]))
#endif
方法三:
#ifndef STATIC_ASSERT
#define STATIC_ASSERT(exp) switch(0) { case 0: case (exp):; }
#endif
方法四:
#ifndef STATIC_ASSERT
#define STATIC_ASSERT(exp) extern void _static_assert(int arg[(exp) ? 1 : -1])
#endif
注意:exp必须是常量表达式,编译期可计算的。方法四可以用于代码块以外。