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

2018-06-06 17:19:14 +08:00
 814084764

如题。

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

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

blockA

if(...){
break;
}

blockB

}while(false)

blockC

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

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

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

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

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

© 2021 V2EX