c,c++异常处理
来源:互联网 发布:淘宝专业版一个月50 编辑:程序博客网 时间:2024/06/04 19:04
C++语言异常处理机制:
C++异常机制使用了三个新的关键字 (SEH(结构化异常处理))
try ──标识可能出现的异常代码段
throw ──抛出一个异常
catch ──标识处理异常的代码段
提示:
使用异常处理将带来更多的系统开销。因此慎用异常。
二、抛出异常
throw
throw必须在 try代码块中.后边跟的值决定抛出异常的类型。
三、捕获异常
catch
出现在try代码块后,后边跟的数据决定捕获的类型
catch(...) //表示捕获所有异常
#include<iostream>#include<cstring>#include<cstdlib>#include<cstdio>#include<stack>#include<queue>#include<algorithm>#define inf 0x3f3f3f3fusing namespace std;int main(){ int a=1,b=0; try { if(b==0) throw; cout<<a/b<<endl; } catch(...)//...指的是捕获所有异常 { b=1; cout<<a/b<<endl; } return 0;}
C++异常处理过程:
,C++ 在语言层上便添加了异常处理机制,使用 try 块来包含那些可能出现错误的代码,你可以在 try 块代码中抛出异常,C++ 使用 throw 来抛出异常。抛出异常后,将转到异常处理程序中执行,C++ 使用 catch 块来包含那些处理异常的代码,catch 块可以接收不同类型的异常。需要说明的是,throw 一般不在 try 块内的代码中抛出异常,try 块内的代码调用了别的函数,如函数A,函数A 又调用了函数 B,throw 可以在函数B中抛出异常,或者更深的函数调用层,无论如何,只要有异常抛出,程序将转到 catch 处执行。
C中使用setjmp()和longjmp()函数去模拟这一功能
首先调用 setjmp() 函数来初始化 jmp_buf 结构变量 jmpb,setjmp() 为跳转返回保存现场并为异常提供处理程序,可以两次跳转,第一次是初始化时,返回零,第二次遇到 longjmp() 函数调用后,longjmp() 函数使 setjmp() 函数发生第二次返回,返回值由 longjmp() 的第二个参数给出(整型,这时不应该再返回零)。
longjmp() 则进行跳转(抛出异常),longjmp() 的第一个参数便是 setjmp() 初始化的 jmpb,若想跳转回刚才设置的 setjmp() 处,则 longjmp() 函数的第一个参数是 setjmp() 所初始化的 jmpb 这个异常,longjmp() 函数的第二个参数是传给 setjmp() 的第二次返回值。
#include<stdio.h>#include<conio.h>#include<setjmp.h>jmp_buf Jump_Buffer;//定义一个全局的异常#define try if(!setjmp(Jump_Buffer))#define catch else#define throw longjmp(Jump_Buffer,1)//setjmp() 第二次将返回1void test(int x){ if(x==10) throw; printf("输入合法");}int main(){ //setjmp() 第一次调用初始化后返回0,取非为真,则执行 try 块内的代码,当因为调用 longjmp() 抛出异常而导致 //setjmp() 第二次返回时(程序将会转到 setjmp() 函数处返回,这时,这时应该执行的是异常处理代码。longjmp() //使 setjmp() 函数返回非0,if(!setjmp(JumpBuffer)) 中将值取非则为假,是以,异常处理放在其后应该使用一个 else: int x; try { scanf("%d",&x); test(x); } catch { printf("输入错误"); } return 0;}
- c#中的异常处理
- 异常处理 - [C++]
- c异常处理
- Objective-c异常处理
- C语言异常处理
- c 异常处理
- C 异常处理设计
- [C++] 异常处理
- C++“异常处理”
- objective-c 异常处理
- 【C++】栈空栈满异常处理
- C++:异常处理
- c++_10: 异常处理
- 【C#】异常处理
- C/C++异常处理
- C++‘异常’处理机制
- C语言异常处理
- 异常处理---C语言
- 从底层分析c和类c语言
- 剑指offer--面试题16:数值的整数次方
- Java Web中的Servlet及Filter
- 巧用 do{} while (0)
- 简析c语言中结构体的声明使用以及位段
- c,c++异常处理
- IAR STM32F10x_StdPeriph_Driver 3.4转3.6.1库
- Android下C/C++实现通用自启动守护实现
- Linux进程全解4——fork创建子进程
- 淘淘商城系列(三)图片服务器的搭建
- 在unity中实现机械臂的仿真操作的方法
- 文章标题
- C++Map的基本操作与使用
- android滑动删除listview