在黑暗中举起探索的火炬的网志
在喧闹、混杂的生活中
你应该与你的心灵和平相处
尽管这世上有很多假冒和欺骗
有很多单调乏味的工作
和众多破灭的梦幻
它仍然是一个美好的世界
记住:你应该努力去追求幸福。
是的,记住:你应该努力去追求幸福。
每个早晨灿烂的太阳升起的时候,
每个人都应
-
2004-02-08
ZT:欣赏优美的代码(5) 作者:axing - [C/C++开发专辑]
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
第五篇:达到目标必经的路 之三 使用断言 断言是一个在假设不正确时会大声抗议的函数或宏指令。可以使用断言来验证在程序中作出的假设并排除意外情况。一个断言函数往往大致带有两个内容:假设为真时的布尔表达式和一个为假时要打印出来的信息。以下是一个假定变量Denominator不为零时一个Pascal断言: Assert ( Denominator<>0,’Denominator is unexpectedlg equal to 0.’ ); 这个断言假定Denominator 不等于”0”,第一部分Denominator<>0 是一个布尔表达式,其结果为True或False。第二部分是当第一部分的结果为False肘,将要打印出来的信息。即使不愿让用户在最终软件中看到断言信息,在开发和维护阶段,使用断言还是非常方便的。在开发阶段,断言可以消除相互矛盾的假设,消除传入于程序的不良数值等等。在维护,可以表明改动是否影响到了程序其它部分。 事实上,断言这项技术已经是在各处被使用了,在Windows平台的Visual C++的环境下已经为开发者预先做好了很多的断言,做为一个开发者所要做的事情仅仅只需要去调用它而已;当然,Linux下的开发者就没有这么幸运,但是如果你要使用他的话并不是一件困难的事情,做为范例,你可以在Linux的源码中找到相关的资料,相关的资料还包括了下文将要提到的预处理等技术。 断言过程是非常容易写的,下面就是一个用Pascal写成的例子: Procedure Assert ( Aseertionn: boolean; Message : string ); begin if( not Assertion) begin writeln(Messase); writeln(’stopping the program.’); halt(FATAL ERROR) end end; 一旦写好了这样一个过程,就可以用像第一个例子那样的语句来调用它。 下面是使用断言的一些指导方针: 如果有预处理程序的话,使用预处理程序宏指令。如果在开发阶段使用预处理程序处理断言,那么在最终代码中把断言去掉是非常容易的。 在断言中应避免使用可执行代码,把可执行代码放入断言,在关闭断言时,编译程序有可能把断言捎去。请看以下断言; ASsert(FileOpen(InputFile)<>NULL,’Coulldnt Oped input file’); 这行代码产生的问题是,如果不对断言进行编译,也编译不了打开文件的代码,应把可执行语句放在自己的位置上,把结果赋给一个状态变量,然后再测试状态。以下是一个安全使用断言的例子: FileStatus : FileOpen (InputFile); Assert(FileStatus<> NULL,’couldn’t Opeh input file’); 事实上,断言最大的用处就是产生两种不同的软件版本:调试版和最终版。我不知道大家是怎样调试程序的,但是在自己的程序中加入标准的断言程序,和预处理程序(例如:#define DEBUG)配合使用是一个不错的主意。如果用过MS的Visual C++的开发者都知道(又用讨厌的Bill做例子实在是违心呀,不过仅仅用于学术用途)软件有Debug和Release两种版本,其中就有这方面的区别。 另外再插一句,在Window平台下开发软件真是很舒服,又有IDE环境又有版本控制的,特别方便,Linux下就比较辛苦一点了,不过Linux下至少还有很多源码可以参考,而我所从事的在大型机环境下的开发工作就更是只能用惨字来形容了,什么东西都要自己写,那个时候打心眼儿里觉得提出软件复用的人是天才! 计划去掉调试帮助 调试帮助措施包括:断言、内存检查报告、打印语句等及其它一些为方便调试而编写的代码。如果所开发的软件是供自己使用的,那么把它们保留在程序中并无大碍。但是,如果是一个商用软件,那么这些措施留在程序中,则会影响其速度和占用空间等性能指标。在这种情况下,应事先作好计划,避免调试信息混在程序中,下面是几种方法。 使用版本控制。版本控制工具可以从同一源文件中开发出不同版本的软件。在开发阶段,可以设置包含全部调试辅助手段的版本控制工具,这样,到了产品阶段,就可以很容易地去掉在商用版本中所不希望出现的这些辅助手段。 小弟我才疏学浅,并不知道Linux下有什么好用(强大、免费)的版本控制工具,据说Rational公司的CleanCase有Linux的版本,只是我从来没有见过。至于Windows平台上就有一些,MS的SourceSafe就很不错哟,也比较好找,如果你要开发Linux下的程序的话,可以考虑使用它来帮助你管理版本,不知道Bill会不会气死。 使用内部预处理程序。如果在编程环境中带有预处理程序,如C 语言,那么仅用一下编译程序开关,就可以加入或去掉这些辅助手段。可以直接使用预处理程序,也可以通过编写宏指令来进行预处理程序定义。下面是一个用c语言写成的,直接使用预处理程序的例子: #define DEBUG … #ifdefined(DEBUG) /*调试代码*/ … #endif 这种思想可能有几种表现形式。不仅仅是定义DEBUG,还可以赋给它一个值,然后再测试它的值,而不是测试它是否被定义了。用这种方法可以区分调试代码的不同层次。也可能希望某些调试用代码长期驻存在程序中,这时可以使用诸如#if DEBUG>0 之类的语句,把这段代码围起来,其它一些调试代码可能是有某些专门
http://junglesong.yourblog.org/logs/104632.html
随机文章:
[转载] c++辨析谈 2004-04-09[转载] Solmyr和Zero的故事 —— 内存,最后一块 2004-04-05ZT:欣赏优美的代码(6) 作者:axing 2004-02-08学习c++的50条忠告(转载) 2004-02-07指针函数和函数指针有什么区别(转载) 2004-01-25
收藏到:Del.icio.us





