ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

【编程技巧】do{..........}while(0)在嵌入式中的作用

2026/8/6 16:53:07 拓冰建站 浏览量
【编程技巧】do{..........}while(0)在嵌入式中的作用

View Post

【编程技巧】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 等控制语句中使用