C语言中常用宏定义

 下面是一些比较重要的宏定义,记录一下:

assert断言:

 #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临时变量

 

 

 

 

 

 

 

 

 

 

 

posted @ 2012-03-27 21:07  Mr.Rico  阅读(1058)  评论(0编辑  收藏  举报