网站大量收购独家精品文档,联系QQ:2885784924

VisualC++中的异常处理浅析.docVIP

  1. 1、本文档共21页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
VisualC++中的异常处理浅析.doc

Visual C++中的异常处理浅析 Visual C++提供了对C语言、C++语言及MFC的支持,因而其涉及到的异常(exception)处理也包含了这三种类型,即C语言、C++语言和MFC的异常处理。除此之外,微软对C和C++的异常处理进行了扩展,提出了结构化异常处理(SEH)的概念,它支持C和C++(与之相比,MFC异常处理仅支持C++)。   一个典型的异常处理包含如下几个步骤:   (1)程序执行时发生错误;   (2)以一个异常对象(最简单的是一个整数)记录错误的原因及相关信息;   (3)程序检测到这个错误(读取异常对象);   (4)程序决定如何处理错误;   (5)进行错误处理,并在此后恢复/终止程序的执行。   C、C++、MFC及SEH在这几个步骤中表现出了不同的特点。本文将对这四种异常处理进行介绍,并对它们进行对比分析。本文例程的调试平台为Visual C++6.0,操作系统为Windows XP,所有程序均调试通过。   在进入正式的讲解之前,先说几句废话。许多的编程新手对异常处理视而不见,程序里很少考虑异常情况。一部分人甚至根本就不考虑,以为程序总是能以正确的途径运行。譬如我们有的程序设计者调用fopen打开一个文件后,立马就开始进行读写操作,根本就不考虑文件是否正常打开了。这种习惯一定要改掉,纵使你再不愿意!这是软件健壮性的需要!异常处理不是浪费时间!   1.C语言异常处理   1.1 异常终止   标准C库提供了abort()和exit()两个函数,它们可以强行终止程序的运行,其声明处于stdlib.h头文件中。这两个函数本身不能检测异常,但在C程序发生异常后经常使用这两个函数进行程序终止。下面的这个例子描述了exit()的行为: #include stdio.h #include stdlib.h int main(void) {  exit(EXIT_SUCCESS);  printf(程序不会执行到这里\n);  return 0; }   在这个例子中,main函数一开始就执行了exit函数(此函数原型为void exit(int)),因此,程序不会输出程序不会执行到这里。程序中的exit(EXIT_SUCCESS)表示程序正常结束,与之对应的exit(EXIT_FAILURE)表示程序执行错误,只能强行终止。EXIT_SUCCESS、EXIT_FAILURE分别定义为0和1。   对于exit函数,我们可以利用atexit函数为exit事件挂接另外的函数,这种挂接有点类似Windows编程中的钩子(Hook)。譬如: #include stdio.h #include stdlib.h static void atExitFunc(void) {  printf(atexit挂接的函数\n); } int main(void) {  atexit(atExitFunc);  exit(EXIT_SUCCESS);  printf(程序不会执行到这里\n);  return 0; }   程序输出atexit挂接的函数后即终止。来看下面的程序,我们不调用exit函数,看看atexit挂接的函数会否执行: #include stdio.h #include stdlib.h static void atExitFunc(void) {  printf(atexit挂接的函数\n); } int main(void) {  atexit(atExitFunc);  //exit(EXIT_SUCCESS);  printf(不调用exit函数\n);  return 0; }   程序输出:   不调用exit函数   atexit挂接的函数   这说明,即便是我们不调用exit函数,当程序本身退出时,atexit挂接的函数仍然会被执行。   atexit可以被多次执行,并挂接多个函数,这些函数的执行顺序为后挂接的先执行,例如: #include stdio.h #include stdlib.h static void atExitFunc1(void) {  printf(atexit挂接的函数1\n); } static void atExitFunc2(void) {  printf(atexit挂接的函数2\n); } static void atExitFunc3(void) {  printf(atexit挂接的函数3\n); } int main(void) {  atexit(atExitFunc1);  atexit(atExitFunc2);  atexit(atExitFunc3);  return 0; }

文档评论(0)

docinppt + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档