zoukankan      html  css  js  c++  java
  • 《C语言

    一、宏的定义与撤销

    需要注意的是:

    (1)宏定义应注意添加括号,这样语义会比较清晰。

    (2)使用#undef可以撤销宏定义。

    (3)引号中的宏定义不会被替换。

    (4)宏定义的宏名必须是合法的标识符。

    (5)宏定义中单、双引号必须成对出现。

    二、带有参数的宏定义

    需要注意的是:

    (1)宏调用时参数的个数要与定义时相同。

    三、跨行的宏定义,使用反斜杠  分隔

    四、三个特殊符号:#,##,#@

    五、常见的宏定义

     1、防止头文件被重复包含

     2、得到指定地址上的一个字节值或字值

    3、得到一个field在结构体(struct)中的偏移量

    #define OFFSETOF( type, field ) ( (size_t) &(( type *) 0)-> field )

    4、得到一个结构体中field所占用的字节数 

    #define FSIZ( type, field ) sizeof( ((type *) 0)->field )

    5、得到一个变量的地址(word宽度)

    #define B_PTR(var) ( (byte *) (void *) &(var) ) 
    #define W_PTR(var) ( (word *) (void *) &(var) )

    6、将一个字母转换为大写

    #define UPCASE(c) ( ((c) >= 'a' && (c) <= 'z') ? ((c) - 0x20) : (c) )

    7、判断字符是不是10进制的数字

    #define DECCHK(c) ((c) >= '0' && (c) <= '9')

    8、判断字符是不是16进的数字

    #define HEXCHK(c) (((c) >= '0' && (c) <= '9') ||((c) >= 'A' && (c) <= 'F') ||((c) >= 'a' && (c) <= 'f'))

    9、防止溢出的一个方法

    #define INC_SAT(val) (val = ((val)+1 > (val)) ? (val)+1 : (val))

    10、返回数组元素的个数 

    #define ARR_SIZE(a) ( sizeof((a)) / sizeof((a[0])) )
  • 相关阅读:
    6389. 【NOIP2019模拟2019.10.26】小w学图论
    6383. 【NOIP2019模拟2019.10.07】果实摘取
    三分查找求极值
    51Nod 1278 相离的圆
    51 Nod 1092 回文字符串
    关于原根(来自百度百科)
    Hdu 1358 Period
    最大子矩阵和
    51 Nod 1072 威佐夫游戏
    The 2018 ACM-ICPC Asia Qingdao Regional Contest, Online(2018 青岛网络预选赛)
  • 原文地址:https://www.cnblogs.com/zhuangquan/p/11697689.html
Copyright © 2011-2022 走看看