关注、星标公众号,不错过精彩内容
来源:嵌入式大杂烩
地址:https://blog.csdn.net/xiaoxu2050/article/details/82893476
一、宏的定义与撤销
需要注意的是:
(1)宏定义应注意添加括号,这样语义会比较清晰。
(2)使用#undef可以撤销宏定义。
(3)引号中的宏定义不会被替换。
(4)宏定义的宏名必须是合法的标识符。
(5)宏定义中单、双引号必须成对出现。
二、带有参数的宏定义
需要注意的是:
(1)宏调用时参数的个数要与定义时相同。
三、跨行的宏定义,使用反斜杠 分隔
四、三个特殊符号:#,##,#@
五、常见的宏定义
1、防止头文件被重复包含
2、得到指定地址上的一个字节值或字值
3、得到一个field在结构体(struct)中的偏移量
# OFFSETOF( type, field ) ( (size_t) &(( type *) 0)-> field )
4、得到一个结构体中field所占用的字节数
# FSIZ( type, field ) sizeof( ((type *) 0)->field )
5、得到一个变量的地址(word宽度)
6、将一个字母转换为大写
# UPCASE(c) ( ((c) >= && (c) <= ) ? ((c) - 0x20) : (c) )
7、判断字符是不是10进制的数字
8、判断字符是不是16进制的数字
# HEXCHK(c) (((c) >= && (c)
9、防止溢出的一个方法
# INC_SAT(val) (val = ((val)+1 > (val)) ? (val)+1 : (val))
10、返回数组元素的个数
# ARR_SIZE(a) ( sizeof((a)) / sizeof((a[0])) )
‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧ END ‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧
近期文章:
关注公众号『strongerHuang』,在后台回复“1024”,查看,回复“加群”,可加入。
长按识别图中二维码关注