宏定义的使用技巧

本文介绍了C语言中宏定义的一些实用技巧,包括防止头文件重复包含、类型重定义、获取结构体字段偏移量和大小、计算最大值与最小值、位操作以及字符处理等,有助于提高代码的可移植性和效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考博客:https://blog.youkuaiyun.com/zhu2695/article/details/9155593
1、防止一个头文件被重复包含
#ifndef BODYDEF_H
#define BODYDEF_H
//头文件的内容
#endif

2、重定义一些类型,防止由于各种平台和编译器的不同,而产生的类型字节数的差异,方便移植。
typedef unsigned char boolean;

3、得到指定地址的一个字节或字

#define MEM_B(x) (*(uint8 *)(x))
#define MEM_W(x) (*(uint16 *)(x))

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

#define FPOS(type,field)  ((uint32)&((type*)0)->field)

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

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

6、求最大值和最小值

#define MAX(x,y) (((x)>(y))?(x):(y))
#define MAX(x,y) (((x)<(y))?(x):(y))

7、得到一个变量的地址

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

8、按照LSB格式把两个字节转化为一个word

#define FLIPW(ray)  ((((word)(ray)[0])*256)+(ray)[1])

9、按照LSB格式把一个word转化为两个字节

#define FLOPW(rey,val)  \
(ray)[0]=((val)/256);  \
(ray)[1]=((val)&0xFF)

10、得到一个字的高位和地位字节

#define WORD_LO(***)  ((byte)((word)(***)&0xFF))
#definr WORD_HI(***)   ((byte)((word)(***)>>8))

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

#define UPCASE© ((©>=‘a’&&©<=‘z’)?(©-0x20):©)

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

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

13、判断字符是不是16进制的数字

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

14、防止溢出的一个方法

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

15、返回数组元素的个数

#define ARR_SIZE(a)  (sizeof((a))/sizeof((a)[0]))

16、返回一个比x大的最接近的8的倍数

#define RND8(x)  ((((x)+7)/8)*8)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值