ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

宏定义的高级应用

宏定义的高级应用

define KEY3_PORT GPIOE

define KEY3_PIN GPIO_Pin_1

define KEY3_EXTI_PORTSOURCE EXTI_PortSourceGPIOE

define KEY3_EXTI_PINSOURCE EXTI_PinSource1

define KEY3_EXTI_Line EXTI_Line1

define KEY4_PORT GPIOE

define KEY4_PIN GPIO_Pin_0

define KEY4_EXTI_PORTSOURCE EXTI_PortSourceGPIOE

define KEY4_EXTI_PINSOURCE EXTI_PinSource0

define KEY4_EXTI_Line EXTI_Line0

上面这一部分可以使用下面的宏定义新形式替换:

define KEY_DEFINE(n,PORT,PIN) \

static GPIO_TypeDef * key##n##_port=GPIO##PORT;
static uint16_t key##n##pin =GPIO_Pin##PIN;
static uint8_t key##n##_exti_port_src=EXTI_PortSourceGPIO##PORT;
static uint8_t key##n##_exti_pin_src =EXTI_PinSource##PIN;
static uint32_t key##n##_exti_line=EXTI_Line##PIN;
KEY_DEFINE(3,E,1)
KEY_DEFINE(4,E,0)

程序中的\是续行符,用与将一行过长的宏定义分成多行书写,提高代码的可读性。使用\的注意事项;\之后不能有任何字符包空格和注释,
实际上这部分代码宏定义展开是这样的:

define KEY_DEFINE(n,PORT,PIN) static GPIO_TypeDef * key##n##_port=GPIO##PORT; static uint16_t key##n##pin =GPIO_Pin##n; static uint8_t key##n##_exti_port_src=EXTI_PortSourceGPIO##PORT; static uint8_t key##n##_exti_pin_src =EXTI_PinSource##PIN; static uint32_t key##n##_exti_line=EXTI_Line##PIN;

使用宏定义KEY_DEFINE(3,E,1)
展开后:
static GPIO_TypeDef * key3_port=GPIOE;
static uint16_t key3_pin =GPIO_Pin_1;
static uint8_t key3_exti_port_src=EXTI_PortSourceGPIOE;
static uint8_t key3_exti_pin_src =EXTI_PinSource1;
static uint32_t key3_exti_line=EXTI_Line1;

返回列表