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

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值