下面是一些比较重要的宏定义,记录一下:
#define assert(cond) ((cond)?(void)0:_assert(#cond,__FILE__,__LINE__))void _assert(char*cond,char*filename,long lineno)
{
printf("assert:%s in file:%s, at line:%d\n",cond,filename,lineno);
}
获得结构体中域的偏移量
#define offsetof(type,field) ((int)((char*)&(((type*)0)->f)-(char*)(type*)0))
#define OFFSETOF(type,field) ((int)&(((type*)0)->f)
大小写转换
#define toupper(ch) ((ch)+'A'-'a')
#define tolower(ch) ((ch)+'a'-'A')
三个数中求最大
#define max(a,b,c) ((a)>(b)?((a)>(c)?(a):(c)):((b)>(c)?(b):(c)))
#define MAX(a,b,c) ((a)>((b)>(c)?(b):(c))?(a):((b)>(c)?(b):(c)))
#define SET(n,i) ((n)|(1u<<i)) //置1
#define RESET(n,i) ((n)&~(1u<<i)) //复位
#define TOGGLE(n,i) ((n)^(1u<<i)) //取反
#define TEST(n,i) !!((n)&(1u<<i)) //测试
#define ROTL(val,n) (((val)<<n)|((val)>>(sizeof(val)*8-n)))
#define ROTR(val,n) (((val)>>n)|((val)<<(sizeof(val)*8-n)))
异或(XOR)逻辑运算
#define XOR(a,b) (((a)||(b))&&!((a)&&(b)))
宏实现SWAP交换
#define SWAP(x,y) ((x)==(y)?NULL:((x)^=(y),(y)^=(x),(x)^=(y)))#define SWAP_(x,y) (temp=x,x=y,y=temp)//在使用前定义一个和x,y同类型的tmp临时变量