比如说:
S_ASSERT(sizeof(char) > sizeof(int))
会导致一个编译错误。
如果是C++11的话,可以使用static_assert。
在static_assert之前,还有些其他方法可以来实现类似的功能。如这些宏:
#define STATIC_ASSERT_2(ex) \ do { typedef int ai[(ex) ? 1 : 0]; } while(0)
# define STATIC_ASSERT_3(ex) \ do { typedef int ai[(ex) ? 1 : -1]; } while(0)
#define STATIC_ASSERT_4(ex) \ switch(0) { case 0: case ex:; }
#define STATIC_ASSERT_5(ex) \ struct x { unsigned int v : ex; }
这行就会在编译期报错。 STATIC_ASSERT_1(sizeof(int) < sizeof(short))
哼哼。。哼哼哼。。
怪不得 。呼唤嗷嗷呢 。。。。