• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

wb-code

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

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 等控制语句中使用

posted on 2025-12-02 01:44  心事不在脸上  阅读(0)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3