博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
#define的高级用法
阅读量:2045 次
发布时间:2019-04-28

本文共 1140 字,大约阅读时间需要 3 分钟。

关注、星标公众,不错过精彩内容

640?wx_fmt=jpeg

来源:嵌入式大杂烩

地址:https://blog.csdn.net/xiaoxu2050/article/details/82893476

一、宏的定义与撤销

640?wx_fmt=png

需要注意的是:

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

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

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

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

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

二、带有参数的宏定义

640?wx_fmt=png

需要注意的是:

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

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

640?wx_fmt=png

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

640?wx_fmt=png

五、常见的宏定义

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

640?wx_fmt=png

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

640?wx_fmt=png

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])) )

‧   END  

近期文章:

关注公众号『strongerHuang』,在后台回复“1024”,查看加群”,可加入

640?wx_fmt=jpeg

长按识别图中二维码关注

你可能感兴趣的文章
分析C语言的声明
查看>>
TCP为什么是三次握手,为什么不是两次或者四次 && TCP四次挥手
查看>>
C结构体、C++结构体、C++类的区别
查看>>
进程和线程的概念、区别和联系
查看>>
CMake 入门实战
查看>>
绑定CPU逻辑核心的利器——taskset
查看>>
Linux下perf性能测试火焰图只显示函数地址不显示函数名的问题
查看>>
c结构体、c++结构体和c++类的区别以及错误纠正
查看>>
Linux下查看根目录各文件内存占用情况
查看>>
A星算法详解(个人认为最详细,最通俗易懂的一个版本)
查看>>
利用栈实现DFS
查看>>
逆序对的数量(递归+归并思想)
查看>>
数的范围(二分查找上下界)
查看>>
算法导论阅读顺序
查看>>
Windows程序设计:直线绘制
查看>>
linux之CentOS下文件解压方式
查看>>
Django字段的创建并连接MYSQL
查看>>
div标签布局的使用
查看>>
HTML中表格的使用
查看>>
(复健计划)python中元祖的一系列操作
查看>>