C语言宏作为另外一个宏的参数
问题:经常遇到单片机的某一个输入输出io量需要更换io脚位。而有些单片机初始化的每个脚位标识或者宏都不一样,所以在改脚位的时候要改动比较多。
如果用宏替代 标识的一部分可能会涉及到用宏作为宁外一个宏的参数的场景。
例如配置7个灯的脚位
头文件:
#define L_1 PB6
#define L_2 PB7
#define L_3 PC1
#define L_4 PD0
#define L_5 PB0
#define L_P PB2
#define L_T PB1
//#define ZZC_SET_IN(EXP) do{SET_##EXP##_IO_IN;} while(0)
//#define ZZC_SET_OUT(EXP) do{SET_##EXP##_IO_OUT;} while(0)
#define ZZC_SET_IN_1(EXP) (SET_##EXP##_IO_IN)
#define ZZC_SET_OUT_1(EXP) (SET_##EXP##_IO_OUT)
#define ZZC_SET_H_1(EXP) (SET_##EXP##_H)
#define ZZC_SET_L_1(_1EXP) (SET_##EXP##_L)
#define ZZC_SET_PU_ON_1 (SET_##EXP##_PU_ON)
#define ZZC_SET_IN(EXP) ZZC_SET_IN_1(EXP)// 这里做是然参数宏先被展开了,不然就会的到 SET_L_1_IO_IN 了
#define ZZC_SET_OUT(EXP) ZZC_SET_OUT_1(EXP)
#define ZZC_SET_H(EXP) ZZC_SET_H_1(EXP)
#define ZZC_SET_L(_1EXP) ZZC_SET_L_1(_1EXP)
#define ZZC_SET_PU_ON ZZC_SET_PU_ON_1
c文件:
void led_init(void)
{
ZZC_SET_OUT(L_1);
ZZC_SET_OUT(L_2);
ZZC_SET_OUT(L_3);
ZZC_SET_OUT(L_4);
ZZC_SET_OUT(L_5);
ZZC_SET_OUT(L_P);
ZZC_SET_OUT(L_T);
}
资料:https://www.cnblogs.com/the-capricornus/p/6841913.html

浙公网安备 33010602011771号