zoukankan      html  css  js  c++  java
  • 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临时变量
  • 相关阅读:
    pyc文件是什么【转载】
    Linux下的python等操作【转载】
    P1012 拼数 字符串
    P1309 瑞士轮 排序选择 时间限制 归并排序
    商业竞争 三分+背包
    老虎ji 剪枝模拟
    交通灯 并查集
    三色抽卡游戏 博弈论nim
    质数串 乱搞
    自动驾驶系统 bfs
  • 原文地址:https://www.cnblogs.com/xkfz007/p/2420161.html
Copyright © 2011-2022 走看看