do while(0)的妙用

do while(0);就如同一个花括号,具有独立的作用域,花括号所表示的符合语句是一个整体,do while(); 语句同样是一个整体,同样可以在if 等条件语句后直接使用。但是后所不同的是,do while(); 作为循环语句还可以使用break 跳出循环,程序执行流也就随之来到了do while(0);的下一条语句。下面就来介绍 do while(0);的三条妙用。

妙用1: do while(0); 可以用来代替goto语句,在需要使用goto的地方直接break。

妙用2: do while(0); 可以使用在复杂的宏函数中,如下代码就不太完备:

#define FUNCTION() {func(); func();}

当我们在调用这个宏函数时,就会在大括号的末尾多出一个分号。

{func(); func();};

虽然可以将分号作为一条空语句来理解,但是遇到更加复杂的宏定义时就会无济于事,所以我们在这里需要用到do while(0);

#define FUNCTION() do{func(); func();} while(0)

这样,我们最后添加的分号就成了do while语句的结束标致,而不是一个空语句了。

妙用3:避免由宏引起的警告。

定义空宏的时候有些编译器会给出警告,这是可以使用do while(0)。

do while(0)的妙用相关推荐

  1. Sleep()简析 和Sleep(0)的妙用

    Sleep()简析 和Sleep(0)的妙用 原贴地址:残月:Thread.sleep(0)的意义 HawkJony:Sleep(0)的妙用 Thread.Sleep(0) 表示挂起0毫秒,你可能觉得 ...

  2. do...while(0)的妙用

    在C++中,有三种类型的循环语句:for, while, 和do...while, 但是在一般应用中作循环时, 我们可能用for和while要多一些,do...while相对不受重视.     但是, ...

  3. Sleep(0)的妙用

    Thread.Sleep(0) 表示挂起0毫秒,你可能觉得没作用,你要写Thread.Sleep(1000) 就有感觉了.似乎毫无意义. MSDN的说明:指定零 (0) 以指示应挂起此线程以使其他等待 ...

  4. Thread.Sleep(0)的妙用

    https://www.cnblogs.com/JianGuoWan/p/9139698.html Thread.Sleep(0) 表示挂起0毫秒,你可能觉得没作用,你要写Thread.Sleep(1 ...

  5. do...while(0)的妙用[转自:http://www.yuanma.org/data/2007/0209/article_2271.htm]

    1. do...while(0)消除goto语句. 通常,如果在一个函数中开始要分配一些资源,然后在中途执行过程中如果遇到错误则退出函数,当然,退出前先释放资源,我们的代码可能是这样: version ...

  6. 9亿做营销0.4亿做研发的妙可蓝多,靠什么卫冕“奶酪一哥“

    妙可蓝多最近刚交出一份亮眼财报. 3月24日,妙可蓝多发布的2021年财报显示,2021年妙可蓝多营收44.78亿元,同比增长57.31%:净利润1.54亿元,同比增长160.6%. 奇怪的是,财报发 ...

  7. 妙味课堂——JavaScript基础课程笔记

    集中时间把秒微课堂JS的基础课程看完,并且认真完成了课后练习.感觉在JS方面的技能算是入了个门了.课后练习的作业完成的代码我都汇总在了这里.至于视频课的学习笔记,则记录如下. 第01课JS入门基础_热 ...

  8. 估算带卷积核二分类0,3的网络的收敛时间和迭代次数

    制作一个网络分类minst的0和3求出这网络的迭代次数曲线表达式n(δ),和准确率表达式p-max(δ),用预期准确率去估算n,并推算需要的时间. 将minst的28*28的图片缩小到9*9,网络用一 ...

  9. 什么是 CNN?Facebook 员工写给小白的机器学习入门贴彻底火了!

    公众号关注 "视学算法" 设为 "星标",DLCV消息即可送达! 白交 发自 凹非寺  量子位 报道 | 公众号 QbitAI 看你是人还是物,是猫还是狗. 卷 ...

最新文章

  1. 【错误记录】Google Play 上架报错 ( 您上传的 APK 没有经过 Zipalign 处理,请对 APK 运行 Zipalign 工具,然后重新上传。)
  2. 线性方程 最小二乘解 SVD分解
  3. Spring是如何校验XML的
  4. LiveVideoStackCon 2022 上海站 专题抢先看
  5. Ubuntu安装LNMP
  6. html代码style图片width,HTML Style columnWidth用法及代码示例
  7. 云服务器重装系统后卡顿,云服务器Windows重装系统须知
  8. Cesium中级教程6 - 3D Models 三维模型
  9. 【Mysql高级语法:视图操作】
  10. mysql80压缩版安装_裕-安装MySQL80(压缩版)
  11. LeetCode(653)——两数之和 IV - 输入 BST(JavaScript)
  12. Visual Studio 11更名为“Visual Studio 2012”,RC版(与.NET 4.5一起)开放下载
  13. 基于Spring开发的一个BIO-RPC框架(对小白很友好)
  14. Python 入门 Day5
  15. Windows 系统彻底卸载 SQL Server 通用方法
  16. 基于Mybatis的语音播报随机点到系统
  17. Redis五大数据类型常用命令与使用场景总结
  18. 三立期货:掌财社重大事项停牌是利好吗?一般停多久?
  19. java基于springboot畜牧场信息管理系统
  20. source not found解决方法(亲测)

热门文章

  1. 高速公路管理信息系统
  2. 29.Linux网络编程熟练掌握 TCP 状态张换图熟练堂握端口复用的方法了解半关闭的概念和实现方式了解多路10 转接模型熟练掌握 select 函数的使用熟练使用 fdset 相关函数的使用能够编写
  3. Skia4Delphi 在 Delphi 里面利用 Skia 画图
  4. 线程池和并行处理 、线程池的作用
  5. Excel 中列出所有满足条件的项
  6. 【ThinkPHP6.x框架】(23)tp框架的附加功能
  7. java 时间格式转码,处理时间后多个0,
  8. 侧滑+viewpager 类似掌阅的滑动demo
  9. laradock 切换php版本,laradock环境docker-compose操作详解,
  10. YOLOv5 yolo.py详解