【编程技巧】do{..........}while(0)在嵌入式中的作用
主要作用:
1、避免宏展开时的语法错误
// 有问题的宏定义
#define SWAP(a, b) \
temp = a; \
a = b; \
b = temp;
// 使用时
if (x > y)
SWAP(x, y); // 展开后语法错误!多了一个;
2、强制使用分号
使用 do while(0) 必须加分号,符合语句习惯
3、作用域隔离:创建独立的变量作用域

// 每个宏调用都有自己的 timeout 变量,不会冲突
I2C_CHECK_EVENT(EVENT_A, 1000); // 内部的 timeout 变量
I2C_CHECK_EVENT(EVENT_B, 500); // 新的 timeout 变量,不会冲突
如果没用do{..........}while(0),那么在同一个函数中,会多次定义timeout变量,这在语法上也是错误的。
4、可以复杂的上下文中使用宏定义
例如:在if/else 等控制语句中使用
浙公网安备 33010602011771号