- do {...} while(0):在宏定义中合理使用do-while(0)可以更规范地使用宏定义
/* 没有使用do-while(0)前 */
#define Led_On() {LED_Enable; LED = 1;}
int main(void)
{
Led_On(); // 此时,编译会报错,因为替换后是“{LED_Enable; LED = 1;};”多了个分号
}
/* 使用do-while(0) */
#define Led_On() do{LED_Enable; LED = 1;}while(0)
int main(void)
{
Led_On(); // 此时,编译正常,替换后为“do{LED_Enable; LED = 1;}while(0);”
}
2. ##:双#号连接宏
/* 不使用"##" */
#define LED0_On() do{LED0_Enable, LED0 = 1}while(0)
#define LED1_On() do{LED1_Enable, LED1 = 1}while(0)
#define LED2_On() do{LED2_Enable, LED2 = 1}while(0)
#define LED3_On() do{LED3_Enable, LED3 = 1}while(0)
#define LED4_On() do{LED4_Enable, LED4 = 1}while(0)
/* 使用“##”, 一条宏定义解决,但注意:这里的n不是变量,在必须是固定 */
#define LED_On(n) do{LED##n##_Enable, LED##n## = 1}while(0)