[转载]有效提高C++ Builder程序质量(一)

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

原著:英雄

程序的bugs越少,程序的评价越高。我们介绍一些调试程序时“应该做”或“不应该做”的原则。写易读的代码:大概也是最重要的一点,就是写干净易读的代码。

  使用Exceptions和Exception的处理方法:开发人员不可能总是依靠于集成的调试工具。所以,学会用其它的方法来找到烦人的bugs是很重要的。一些重要的、处理的错误可能会在窗体之外发生。在C++标准制定出来之前的黑暗日子里,在程序里面发出发生错误的信号,通常是通过返回错误代码完成的(现在这种方法仍然应用于OLE技术和一些Winapi函数),这样的处理方法很容易就会被忽略。(比如说,你经常检查winapi函数的返回值吗?)所以,出现问题的可能性并不小。由于以上的原因,我们需要一个这样的机制,它能让我们不能忽略这些错误,而且,这个机制应该能被我们控制和自定义的。在这样的需求下,异常处理机制出现了。需要一个特殊的错误类型吗?简单,定义一个新的异常类型就行了(和定义一个类的方法差不多),然后抛出(throw)它。

下面这个例子说明了这一过程。
  例1:
  //----------------------------------------------------------------  
  class MyException  
  {  
  public:  
  AnsiString iMessage;  
  MyException(AnsiString Message) { iMessage=Message;}  
  };  
  throw new MyException(“Test Exception Message”);  
  //---------------------------------------------------------------  
  这个程序简单高效,而且便于自定义。你也许会问:“我可以使抛出异常了,但是,怎么控制它们呢?”C++Builder为我们中定义了try {} catch (...) {}机制。这个机制完全可以按照需要自定义。要使用异常处理了,只要把要执行的代码放到try块里面,为了让程序知道出现异常后应该做什么,还需要定义一个catch()或是__finally块。catch()语句里面可以指定一个要捕捉的类型或是变量(比如例1,就是catch(MyException &E){ /* 异常处理代码/}这个机制很强大,甚至可以用它来捕捉树结构或是继承类的异常,如果捕捉了基类的异常,它就能捕捉到继承这个基类的所有的类的异常。比如,在VCL中,所有的异常都是继承于Exception类。所以,catch(Exception& E)可以捕捉到除了EsocketError的所有VCL异常。(这点请特别注意,以后还将继续讨论。)为了让这个机制更强大,C++Builder中还定义了catch(…)语句。(没错,就是三个点)使用这条语句可以捕捉到所有的异常。还有更多的功能吗?当然,你可以添加更多的catch()语句,可以向使用if...else if...语句那样使用它。注意,在一系列的catch()语句中,错误不会被重复的捕捉,也就是说,如果前面的catch()语句捕捉到了错误,后面的catch()语句将不会捕捉这条错误。

例2:
  //----------------------    
  try  
  {  
   // 正常代码  
  }  
  catch(EDBEngineError &E)  
  {  
   // 处理数据库引擎错误  
  }  
  catch(EExternalError &E)  
  {  
   // 处理窗口类的错误  
  }  
  catch(Exception &E)  
  {  
   // 处理所有的VCL错误
  }  
  //----------------------  
  例2的代码运行流程是这样的:“错误是EDBEngineError吗?是->处理它。不是->运行下一个catch语句”“错误是EExternalError吗?是-〉处理它。不是-〉运行下一个catch语句”等等。

  这个机制还有更多的功能。如果你想处理异常,但是不想在处理的位置停止,那么可以重新抛出异常。这时,程序将继续寻找下一个catch()语句来处理这个异常。这个方法和“throw”差不多。这样,你处理过的异常会再次被抛出,继续寻找下一个catch语句来处理它。

  最后一个要说的是__finally(这不是标准的用法,是Borland添加的一个好方法),在__finally{}程序块中代码,无论是否发生异常都会被执行。这是一个清理程序中使用new分配的本地变量,设置用作旗标的变量值为正常的好位置。

  就是这些了。有时间的话,请看看C++Builder帮助文件中的Exception类以及继承Exception的类。这些将对于理解本节所说的内容有很大帮助。

[转载]掌握C++Builder的调试艺术 (作者:霍炬编译)  程序bugs越少,最终用户对这个程序的评价越高。而开发人员事先对bugs的处理越多,最终用户能提供的关于bugs的信息就越多,也越准确,这样,开发人员在接到最终用户反映之后,就能够快速找到出现bugs的那部分代码,并以最快速度发布程序的升级包。   在这份教程中,我们从最基本的部分开始,逐步介绍许多在调试程序时“应该做”或“不应该做”的原则。正如你将看到的,这份教程中所指的 阅读详情

相关推荐

RAD Studio 11.2详解其务实改进(Delphi & C++ Builder)-Alexandria

● 开发人员生产力:“搬运式的复用”是个特性。使用Delphi和C++Builder使得开发机构交付订单和市场需求的速度提高了5倍有余。● 快速的“原生”应用程序:操作系统本机的原生编译器,赋能App应用应有的原生速度(没有任何臃肿)。● 数据库访问:Delphi最原始的关键设计之,就是将数据库访问完全集成到RAD Studio之中。● 强大的C++库:数百个C++库,可以在C++Builder中使用,或者在RAD Studio中的Delphi下使用。

pulledup的博客 9350

银行客户端提示External exception EEFFACE

银行客户端提示External exception EEFFACE 下载组件msxml 4.0 sp2 分析程序和sdk

Quasimodo19的博客 2420

c++与fortran混合语言编程中动态链接库的调用,[转载]C++与Fortran混合语言编程中动态连接库的调用...

摘要:介绍了C++和Fortran 90混合语言编程中,在C++中调用Fortran动态连接库(DLL,DynamicLink Library)的方法以及参量传递、函数调用等的方法。关键词:混合编程,Fortran 90C++,动态连接库前言混合语言编程是利用二种或二种以上编程语言编写的源码构建程序模块的过程。混合语言编程有以下优点:(1)调用已经存在的源码,如许多单位以前的计算机程序大部分都是...

weixin_39997400的博客 457

Solutions for Kess v2 connection error :"External exception EEFFACE"

Optional and full solutions forKess v2 kusuiteconnection error :"External exception EEFFACE". possible reasons: 1. do you use win 7 or vista system?pls try on Windows XP system:http://www.chinaa...

weixin_30954265的博客 622

[转载]有效提高C++ Builder程序质量()

原著:英雄使用记录机制:你不可能总是用调试器来调试代码,在某些情况下,可能无法使用内部集成的调试器。这时候,你就不得不依靠其他手段调试程序了。有经验的程序员可能会借助古老的调试方法,例如,使用些分类的记录机制来确定程序实际运行的过程。我们很幸运,现在有系列的方法可以简单的完成这样的工作。下面将介绍3种常用方法。  第个:OutputDebugString。(WinAPI: VOID Outp

游乐园 1236

C++Builder和Delphi中的复活节彩蛋 ()

C++Builder和Delphi中的复活节彩蛋 ()[@more@] C++Builder和Delphi中的复活节彩蛋XML:namespace prefix = o ns = "urn:schemas-mic...

circularr9834的博客 199

与Delphi 和C++Builder 完美整合的报表控件QuickReport

QuickReport 是个100% 用Delphi 代码编写的分栏报表生成器控件,它可与Delphi 和C++Builder 完美整合,并且Delphi/C++Builder IDE 中使用表单设计器作为报表设计器来设...

590

What's New in Delphi and C++Builder XE7

http://docwiki.embarcadero.com/RADStudio/XE7/en/What%27s_New_in_Delphi_and_C%2B%2BBuilder_XE7 转载于:https://www.cnblogs.com/starluck/p/3974843.html

weixin_30514745的博客 115

C++ 日志

个经典的C++日志类 转载于 http://blog.sina.com.cn/s/blog_59b6af6901010nfh.html个多线程的日志类 转载于 http://www.oschina.net/code/snippet_932501_35769#0-tsina-1-8627-397232819ff9a47a7b7e80a40613cfe1c++ 多线程写日志的个很实用的日志

xcw_1987的博客 346

C/C++从入门到高手所有必备PDF书籍收藏()

C/C++从入门到高手所有必备PDF书籍收藏,喜欢的朋友支持下吧~ C: 《C和指针》- PDF高清版 下载地址:http://www.fishc.com/a/book/C/821.html 《C程序设计语言》- 完美中文版PDF 下载地址:http://www.fishc.com/a/book/C/632.html 《The C P...

weixin_30544657的博客 1106

优秀的开源C++库:ACE及其安装使用 ()

优秀的开源C++库:ACE及其安装使用 ()[@more@]开源C++库:ACE及其安装使用 什么是ACE?  ACE自适配通信环境(ADAPTIVE Communication Environment)是可以自由使用、开放...

ciya3282的博客 142

C++ 著名程序库 概览

      本文转载自: http://ace.acejoy.com/thread-3777-1-1.html   1、C++各大有名库的介绍——C++标准库 2、C++各大有名库的介绍——准标准库Boost 3、C++各大有名库的介绍——GUI 4、C++各大有名库的介绍——网络通信 5、C++各大有名库的介绍——XML 6C++各大有名库的介绍——科学计算 ...

weixin_34090562的博客 350

C++语言书籍下载

本文摘自: 智趣网-C语言/C++语言编程技术交流论坛(http://www.bczh.net) 详细出处请参考:http://www.bczh.net/thread-1194-1-1.html 《C++程序设计教程》电子教案下载 C++实践指导书 The C++ Programming Langunge书籍下载(英文原版) C++ Builder 5编程实例与技巧(...

weixin_33713707的博客 217

英巴卡迪诺新年战略:支持Linux提供中文手册

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34404393的博客 79
上一篇: [转载]图片防盗链代码
下一篇: [转载]有效提高C++ Builder程序质量(二)
Rex_love_Burger
博客等级 码龄23年 13粉丝 47原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值