c语言的宏定义有一个坏处同时也是好处,就是不区分类型,因此可以让c可以“动态”地处理输入参数。如下面的操作
//交换字节
#define BSWAP_8(x) ((x) & 0xff)
#define BSWAP_16(x) ((BSWAP_8(x) << 8) | BSWAP_8((x) >> 8))
#define BSWAP_32(x) ((BSWAP_16(x) << 16) | BSWAP_16((x) >> 16))
#define BSWAP_64(x) ((BSWAP_32(x) << 32) | BSWAP_32((x) >> 32))
//交换两个变量的值
#define SWAP(a, b) \
(((a) ^= (b)), ((b) ^= (a)), ((a) ^= (b)))
//位操作
#define SET_REG_BIT(reg, bit) do { (reg |= (1 << (bit))); } while (0)
#define CLR_REG_BIT(reg, bit) do { (reg &= ~(1 << (bit))); } while (0)