网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > VC++ > 正文
Visual C++ 中的结构异常处理
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/15
下载{$ArticleTitle}原创论文样式
开。
3、异常处理句柄(Exception handler)
3.1、异常(或例外)处理句柄的定义
异常(或例外)是你不希望出现的事件。在一个完好的应用程序中,你不希望读写无效内存地址或除数为零的情况出现。但是这类错误的确会发生。在出现这类错误时,CPU会负责提出针对该类错误的例外。当CPU提出一个例外时,我们称之为硬件异常(或例外)(hardware exception)。操作系统和应用程序自身也可以提出自己的异常。这类异常我们称之为软件异常(或例外)(software exception)。
当一个硬件异常或软件异常被提出时,操作系统向你的程序提供一种机会使得你的程序可以诊断那类异常被提出并允许你的程序对此进行处理。异常处理句柄的语法为
__try {
// Guarded body
.
.
.
}
__except (exception filter) {
// Exception handler
.
.
.
}
请注意关键词__except。当你建立一个try程序段时,它必须跟随一个finally程序段或一个except程序段。一个try程序段不能同时既跟随一个finally程序段又跟随一个except程序段。一个try程序段也不能同时跟随多个finally程序段或多个except程序段。但是,try-finally程序段却可以嵌套在try-except程序段内,或try-except程序段嵌套在try-finally程序段内。
3.2、几个例子
不同于中断处理句柄,异常处理句柄直接由操作系统执行,编译器不需要做太多工作。下面我们通过几个具体例子来讨论异常处理句柄是如何工作的。
3.2.1、例5--Funcmeister1函数
下面是一个使用了try-except异常处理句柄的函数Funcmeister1,其代码见清单十。
DWORD Funcmeister1 (void) {
DWORD dwTemp;
// 1. Do any processing here.
.
.
.
__try {
// 2. Perform some operation.
dwTemp = 0;
}
__except (EXCEPTION_EXECUTE_HANDLER) {
// 3. Handle an exception; this never executes.
.
.
.
}
// 3. Continue processing.
return (dwTemp);
}
例10 例5Funcmeister1函数代码
在Funcmeister1函数中的try程序段内,我们简单地将dwTemp赋值为零。该操作不会导致任何异常的提出。所以,except程序段内的程序永远不会被执行。请注意,这有别于中断处理句柄try-finally。在执行了dwTemp赋值语句后的下一个执行语句是return返回语句。
虽然我们不鼓励在try程序段内使用return, goto, continue和break语句,但是在异常处理句柄的try程序段内使用这些语句不会象中断处理句柄那样造成运行代码的增加和效率下降。
3.2.2、例6--Funcmeister2函数
让我们对Funcmeister1函数进行一些改动,看看会出现什么情况。改动后的函数见例11。
DWORD Funcmeister2 (void) {
DWORD dwTemp = 0;
// 1. Do any processing here.
.
.
.
__try {
// 2. Perform some operation(s).
dwTemp = 5 / dwTemp; // Generate an exception
dwTemp += 10; // Never excutes
}
__except ( /* 3. Evaluate filter. */ EXCEPTION_EXECUTE_HANDLER) {
// 4. Handle an exception; this never executes.
MessageBeep(0);
.
.
.
}

// 5. Continue processing.
return (dwTemp);
}
例11 例6Funcmeister2函数代码
函数Funcmeister2中的try程序段dwTemp = 5 / dwTemp语句导致CPU提出一个硬件异常。当该异常被提出时,操作系统会寻找相对应的except程序段的起始位置并评估其异常筛选表达式(exception filter expression)。异常筛选表达式可以取下列标识符值之一。这些标识符定义在Win32 EXCPT.H头文件中。
标识符 定义为
EXCEPTION_EXECUTE_HANDLER 1
EXCEPTION_CONTINUE_SEARCH 0
EXCEPTION_CONTINUE_EXECUTION -1
3.3、异常筛选(exception filter)
EXCEPTION_EXECUTE_HANDLER表明当一个异常出现时,运行程序跳到except程序段转而执行except程序段内的代码。except程序段内的代码执行完后,系统认为

网学推荐

免费论文

原创论文

浏览:
设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
湘ICP备09003080号