列举一些C语言中常用的宏定义

嵌入式技术

1372人已加入

描述

写好C语言,使用宏定义可以防止出错,提高可移植性、可读性等。下文列举一些成熟软件中常用的宏定义。

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

存储器

2. 重新定义一些类型,使类型字节数一致,方便跨平台移植。

存储器

3. 获取指定地址上的一个字节或字

存储器

4. 求最大、最小值

存储器

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

 


#define FPOS( type, field ) 
/*lint -e545 */ ( (dword) &(( type *) 0)-> field ) /*lint +e545 */

 

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

存储器

7. 按照LSB格式把两个字节转化为一个Word

存储器

8. 按照LSB格式把一个Word转化为两个字节

存储器

9. 得到一个变量的地址(word宽度)

存储器

10. 得到一个字的高位和低位字节

存储器

11. 返回一个比X大的最接近的8的倍数

存储器

12. 将一个字母转换为大写


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

 

13. 判断字符是不是10进制的数字

存储器

14. 判断字符是不是16进制的数字

存储器

15. 防止溢出的一个方法

 


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

 

16. 返回数组元素的个数

存储器

17. 返回一个无符号数n尾的值MOD_BY_POWER_OF_TWO(X,n)=X%(2^n)

存储器

18. 对于IO空间映射在存储空间的结构,输入输出处理

 


#define inp(port) (*((volatile byte *) (port)))
#define inpw(port) (*((volatile word *) (port)))
#define inpdw(port) (*((volatile dword *)(port)))
#define outp(port, val) (*((volatile byte *) (port)) = ((byte) (val)))
#define outpw(port, val) (*((volatile word *) (port)) = ((word) (val)))
#define outpdw(port, val) (*((volatile dword *) (port)) = ((dword) (val)))

 

19. 宏定义防止使用时错误用小括号包含。

例如:

存储器

用do{}while(0)语句包含多语句防止错误

例如:

存储器

 


  应用时:

存储器

解决方法:

存储器






审核编辑:刘清

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分