Home > Essay, IT, Life in GUCAS > The Use of “do {/*…*/} while(false);” & Some Miscellaneous Things

The Use of “do {/*…*/} while(false);” & Some Miscellaneous Things

分享家:Addthis中国

最近一段时间,意外的事情特别多。此处所指的意外指的是我意料之外的事情,不是所谓的 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倍。截止到现在,此澡堂依然营业中

而且此水已为学校服役两年之久。呃真庆幸我毕业不止两年了~

校方回应:此水完全符合标准。但是几名化工学院的学生检验后发现铅严重超标,据说这几个学生还蛋疼地去检验了食堂的米饭,发现米饭奇迹般地符合了牲畜的饮食标准,一阵内牛满面!

衷心希望,江大不要再搞出这么多新闻了。也希望中科院研究生院在我毕业之后,依然多多的出正面新闻

You don't feel like leaving comments? Please leave your palm-print.
懒得留言?那留下您的掌印吧。
  1. jaffachu
    April 19th, 2010 at 21:56 | #1

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

  2. April 19th, 2010 at 22:09 | #2

    @jaffachu
    心黑啊~

  3. April 20th, 2010 at 00:08 | #3

    难怪问我朱磊的玉照
    这个骗子大婶太悲哀了……她如果自称教体育是不是要让她表演个前空翻?

  4. April 20th, 2010 at 00:39 | #4

    @Fanofun
    真希望她说她是教武术的,我让她表演铁头功!

  5. April 20th, 2010 at 07:54 | #5

    学长,蛋挞来踩踩。任何CODE都有其优势的地方,写的很不错。
    PS:万恶的验证码。。。

  6. April 20th, 2010 at 08:24 | #6

    @蛋挞
    这个 ReCAPTCHA 验证码是希望能对人类文化的传承做点贡献。具体可见此处

  7. April 20th, 2010 at 10:17 | #7

    话说某天,我来到中科院尾行一彪形大汉。见他放慢脚步后,我甚是激动,加快速度赶上,我跟她说:“我从燕郊过来,钱包被人偷了,肚子很饿。我是老师,不是坏人,可否给点钱买两个包子吃吃”。
    我心里想的是:他一给我买包子,我咬了一口包子后立马咬破嘴里的药粉包,随后口吐白沫,讹他一笔钱财。

    他便问我:既然您是老师,您教什么的?
    我回:我教语文的。
    他便问:鲁迅原名为何?
    我:饿……
    他又问:《桃花源记》背一段,不会背说说作者是谁也行?
    我:饿……
    他又问:骆宾王的《鹅》总会背吧。
    我:饿……

    我没想到科学院的学生这么牛叉,竟然没上钩。继续尾随,见机行事。

    我又尾行一女子,正跟那女子说“我是名老师”。
    忽然,那个彪形大汉陡然窜出插嘴道:你教什么的?
    我慌忙说:历史。
    他问道:说说长安是哪六朝的古都?
    我:饿……
    他又问:古代史你不行,那就现代史,说说三个代表。
    我吐血……
    他再问:那问你近代史:什么代表了辛亥革命的胜利果实被袁世凯窃取了?
    我吐血……

    好不容易挨到了晚上,正要见机行事,忽然那彪形大汉又现身了,我赶紧仓皇而逃!

    今天我背死了——一天3次遇到同一个学生,还被他郁闷三次……
    他在问我教什么课的时候,幸好没说我是教武术的,否则他一定让我表演铁头功不可!@Iron_Feet

  8. April 20th, 2010 at 10:29 | #8

    @beserenity
    不在新加坡好好行骗,跑北京来讹自己人。唉,苍天啊!

  9. April 20th, 2010 at 14:51 | #9

    哈哈,我终于知道昨天你说的骗局是啥了。可惜的是,GR上看完了总是忘了过来踩一脚。。。
    PS:我学编程时候老师也警告尽量不要Goto,以至于我现在对Goto还有点敬畏(其实我觉得Goto挺直接的)

  10. April 20th, 2010 at 15:17 | #10

    @Junjun
    我一般用GR看完后,也会点击进去看看别人的评论!

  11. April 28th, 2010 at 02:15 | #11

    炼钢的废水 我晕啊 ~

  12. April 28th, 2010 at 09:36 | #12

    @疾风
    太狠了,唯利是图啊!

  13. November 9th, 2010 at 11:37 | #13

    那大婶好可怜- -

  1. No trackbacks yet.

:D 8) :down: 8O :!: :halo: :evil: :heart: :kiss: :lol: :money: :mrgreen: :x :| :pirate: :?: :oops: :roll: :P :( :) :o :up: :vangry: :twisted: ;) :? :cry:

也许您会觉得ReCAPTCHA验证码很繁琐,会认为他和其他所有的验证码一样让你厌烦。那请点击这里,您会了解到ReCAPTCHA为人类文化的传承做出了多大的贡献。请您也为人类知识的保存和传递也出一份力吧,谢谢!
 
    Posts Nav.