do{}while(false) 这么使用上瘾了

2018 年 6 月 6 日
 814084764

如题。

特别是在需要 return 的函数里面,真 TM 爽!

9720 次点击
所在节点    程序员
46 条回复
Akiyu
2018 年 6 月 6 日
不懂什么意思, 直接在 do while 里面写 false
不就和没有写循环控制语句一样么
rootx
2018 年 6 月 6 日
怎么个爽法
sun1991
2018 年 6 月 6 日
@Akiyu 循环只执行一次, 但是中间可以跳出该循环
jjianwen68
2018 年 6 月 6 日
没明白好处
opengps
2018 年 6 月 6 日
我也没看懂,需要跳出时候跟直接 return 有啥区别?
ysc3839
2018 年 6 月 6 日
第一次见这种用法好像是在微软的代码里?因为返回之前要释放一些资源,所以不能直接 return。
也有不用这种写法直接用 goto 的,但是 goto 只有 C/C++ 可以用。
huoru
2018 年 6 月 6 日
一般是 用在宏里面吧?
remarrexxar
2018 年 6 月 6 日
是不是这个意思
do{

blockA

if(...){
break;
}

blockB

}while(false)

blockC

blockA 执行后满足某条件则不执行 blockB,直接执行 blockC,类似于 goto 的作用
kran
2018 年 6 月 6 日
解决代码嵌套很管用
c3824363
2018 年 6 月 6 日
goto 就挺好
有些语言自以为去掉 goto 就不会产生非常混乱的代码了
wplct
2018 年 6 月 6 日
为啥不再定义个方法?
grantonzhuang
2018 年 6 月 6 日
@remarrexxar 大 js 的立即执行函数也可以这么搞😂
ryd994
2018 年 6 月 6 日
所以啊,实际上 goto 该用还是得用
而且你这样也只能考虑一种 bailout
实际上还会遇到多层嵌套的情况,比如到一半的时候拿了 xx 锁,过了一会又拿了 yy 内存。如果只有一层 bailout 的话就只能在出口判断自己要不要释放。
有 goto 的话加一个 cleanup xx 的 label 就好
zhuangzhuang1988
2018 年 6 月 6 日
有好看的异常不用 用这货。
ryd994
2018 年 6 月 6 日
等等,没有 goto 的语言一般是有 throw catch exception 的。用 exception 来代替的好处是,可以不用一层层检查返回值,直接扔给上层。用 goto 退的话,你还是跑不掉要检查返回
reself
2018 年 6 月 6 日
看是啥语言。貌似还能对付宏定义的问题
Mitt
2018 年 6 月 6 日
@zhuangzhuang1988 异常代价高啊
notreami
2018 年 6 月 6 日
想不明白,什么场景非要这样写,大部分语言都有对应的跳出当前代码块
cuzfinal
2018 年 6 月 6 日
菜鸡前端无法理解
jiang42
2018 年 6 月 6 日
C 里头宏的一种惯用法

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/460932

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX