C语言常用的宏定义
1 特殊的宏
C几种特殊标准定义
__FILE__ :文件名, 用%s接收 __LINE__ :行号,用%d接收 __FUNC__ : 函数名, 用%s接收 __DATE__:编译时刻的日期字符串,%s接收 __TIME__:编译时刻的时间字符串,%s接收 __STDC__:判断该文件是不是标准C程序
#ifdef __STDC__ printf('标准C代码文件\n'); #else printf('非标准C代码文件\n'); #endif
2 求最大值和最小值
#define MIN(a, b) ((a) < (b) ? (a) : (b)) //得到最小值 #define MAX(a, b) ((a) < (b) ? (b) : (a)) //得到最大值
3 求数组长度
#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]))
4 拼接两个参数
#define CONCAT_2(p1, p2) CONCAT_2_(p1, p2) #define CONCAT_2_(p1, p2) p1##p2
5 可变参数取值
//获得第一个元素 #define GET_VA_ARG_1(...) GET_VA_ARG_1_(__VA_ARGS__, ) #define GET_VA_ARG_1_(a1, ...) a1 //获得除了第一个元素外的其他元素 #define GET_ARGS_AFTER_1(...) GET_ARGS_AFTER_1_(__VA_ARGS__, ) #define GET_ARGS_AFTER_1_(a1, ...) __VA_ARGS__
6 设置一个字的某一个比特
//将一个字W的第B个bit置位 #define SET_BIT(W, B) ((W) |= (uint32_t)(1U << (B))) //将一个字W的第B个bit清空 #define CLR_BIT(W, B) ((W) &= (~(uint32_t)(1U << (B))))