The Use of “do {/*…*/} while(false);” & Some Miscellaneous Things
最近一段时间,意外的事情特别多。此处所指的意外指的是我意料之外的事情,不是所谓的 accident 。
接下来把最近遇到的几个我觉得值得一说的事情提一下。
上周某天,朱磊同学问我,如何可以比较好的把代码中的 goto 去掉。(朱磊背部玉照由 Bida 提供)
这个问题让我想到了 Dbger 学长的一篇日志,里面提到了如何用
do { /***/ } while(false);
来替代 goto 方法。
很多程序员都把 goto 看成是洪水猛兽,说他会破坏程序结构。当然破坏结构性的确不假,但其实 goto 也没这么一无是处啦。比方说下面这段代码。
bool Execute() { // 分配资源 int *p = new int; bool bOk(true); // 执行并进行错误处理 bOk = func1(); if(!bOk) { delete p; p = NULL; return false; } bOk = func2(); if(!bOk) { delete p; p = NULL; return false; } bOk = func3(); if(!bOk) { delete p; p = NULL; return false; } // 省略无数行代码 // 执行成功,释放资源并返回 delete p; p = NULL; return true; }
如果用了 goto 反而会清晰很多,
bool Execute() { // 分配资源 int *p = new int; bool bOk(true); // 执行并进行错误处理 bOk = func1(); if(!bOk) goto errorhandle; bOk = func2(); if(!bOk) goto errorhandle; bOk = func3(); if(!bOk) goto errorhandle; // 省略N多行代码 // 执行成功,释放资源并返回 delete p; p = NULL; return true; errorhandle: delete p; p = NULL; return false; }
当然,在一些 goto 的强硬抵制派眼里,这段代码绝对是一坨便便。这个时候就到了
do { /***/ } while(false);
展示其魅力的时候了。且看
bool Execute() { // 分配资源 int *p = new int; bool bOk(true); do { // 执行并进行错误处理 bOk = func1(); if(!bOk) break; bOk = func2(); if(!bOk) break; bOk = func3(); if(!bOk) break; // 直接喀嚓掉无数行代码 }while(0); // 释放资源 delete p; p = NULL; return bOk; }
不用我多说了,效果很明显了。
再次申明,以上是 Dbger 学长在工作中遇到的妙用。我看到后觉得非常棒,故予以提到。
其实本日志的重心是接下来提到的两件事。
话说某天,我走出实验楼很意外的遇见一肥阿婆尾行我。我甚是好奇她会有何行动,故放慢脚步。
见我放慢脚步后,她甚是激动,加快速度赶上,对我叽里咕噜说了一通,大意是:她从郊区过来,钱包被人偷了,肚子很饿。她说她是老师,不是坏人,可否给他买两个包子吃吃。
也许各位看官会觉得我内心太阴暗,我听到她说这些话的时候,第一个想到的是:此女是否是嘴角中藏了一包药粉。骗我给她买包子,她咬了一口包子后立马咬破药粉包,随后口吐白沫,讹我钱财?
我便问她:既然您是老师,您教什么的?她回:我教语文的。我便问:鲁迅原名为何?此女呆滞。我又问:《桃花源记》背一段,不会背说说作者是谁也行?此女呆滞。我又问:骆宾王的《鹅》总会背吧。持续呆滞ing。我呵呵一笑,扬长而去。
随后因为有事,我回实验楼,在途中远望到此肥婆在尾行一女子。我小步跟上,尾行并侧听。待听到她说“我是名老师”,我窜出插嘴道:你教什么的?她慌忙说:历史。我问道:说说长安是哪六朝的古都?此女呆滞。我又问:古代史你不行,那就现代史,说说三个代表。此女估计要吐血了。我再问:那问你近代史:什么代表了辛亥革命的胜利果实被袁世凯窃取了?此女依然茫然。我呵呵一笑,再次扬长而去。被其尾行的女子也走了。
晚上准备回宿舍,我离开实验楼,见此肥婆依然在那,我大步朝她走去,她如同见了鬼魅一般仓皇而逃!真不知道是我背——一天3次遇到同一个骗子,还是她背——一天被我郁闷3次。她也不知道换个阵地![]()
以下内容都是网络信息,纯属道听途说,不知真伪,也不做任何评论,仅仅是复述而已!
这几天我的本科母校——江南大学又被顶到了风头浪尖。真是悲剧。
打从我毕业过后,咋就没怎么听到母校有啥正面新闻呢。真是应了一句话“好事不出门坏事传千里”。据相关报道,江大澡堂用的洗澡水竟然是炼钢的废水,里面的铅含量超标10倍。截止到现在,此澡堂依然营业中。
而且此水已为学校服役两年之久。呃真庆幸我毕业不止两年了~
校方回应:此水完全符合标准。但是几名化工学院的学生检验后发现铅严重超标,据说这几个学生还蛋疼地去检验了食堂的米饭,发现米饭奇迹般地符合了牲畜的饮食标准,一阵内牛满面!
衷心希望,江大不要再搞出这么多新闻了。也希望中科院研究生院在我毕业之后,依然多多的出正面新闻![]()
Push








你好别说,这事儿俺听说以后,某天经过澡堂旁边,特意留意了下以前从来不看的那个送热水的卡车,上面还真写着XX热水,看来记者就是跟踪此车获得的消息
@jaffachu
心黑啊~
难怪问我朱磊的玉照

这个骗子大婶太悲哀了……她如果自称教体育是不是要让她表演个前空翻?
@Fanofun
真希望她说她是教武术的,我让她表演铁头功!
学长,蛋挞来踩踩。任何CODE都有其优势的地方,写的很不错。
PS:万恶的验证码。。。
@蛋挞
这个 ReCAPTCHA 验证码是希望能对人类文化的传承做点贡献。具体可见此处
话说某天,我来到中科院尾行一彪形大汉。见他放慢脚步后,我甚是激动,加快速度赶上,我跟她说:“我从燕郊过来,钱包被人偷了,肚子很饿。我是老师,不是坏人,可否给点钱买两个包子吃吃”。
我心里想的是:他一给我买包子,我咬了一口包子后立马咬破嘴里的药粉包,随后口吐白沫,讹他一笔钱财。
他便问我:既然您是老师,您教什么的?
我回:我教语文的。
他便问:鲁迅原名为何?
我:饿……
他又问:《桃花源记》背一段,不会背说说作者是谁也行?
我:饿……
他又问:骆宾王的《鹅》总会背吧。
我:饿……
我没想到科学院的学生这么牛叉,竟然没上钩。继续尾随,见机行事。
我又尾行一女子,正跟那女子说“我是名老师”。
忽然,那个彪形大汉陡然窜出插嘴道:你教什么的?
我慌忙说:历史。
他问道:说说长安是哪六朝的古都?
我:饿……
他又问:古代史你不行,那就现代史,说说三个代表。
我吐血……
他再问:那问你近代史:什么代表了辛亥革命的胜利果实被袁世凯窃取了?
我吐血……
好不容易挨到了晚上,正要见机行事,忽然那彪形大汉又现身了,我赶紧仓皇而逃!
今天我背死了——一天3次遇到同一个学生,还被他郁闷三次……
他在问我教什么课的时候,幸好没说我是教武术的,否则他一定让我表演铁头功不可!@Iron_Feet
@beserenity
不在新加坡好好行骗,跑北京来讹自己人。唉,苍天啊!
哈哈,我终于知道昨天你说的骗局是啥了。可惜的是,GR上看完了总是忘了过来踩一脚。。。
PS:我学编程时候老师也警告尽量不要Goto,以至于我现在对Goto还有点敬畏(其实我觉得Goto挺直接的)
@Junjun
我一般用GR看完后,也会点击进去看看别人的评论!
炼钢的废水 我晕啊 ~
@疾风
太狠了,唯利是图啊!