每一种编译器实现异常处理的方式会有所不同,但是都是基于Windows的SEH异常处理。这里以MSC编译器为例。

C异常处理

#include <Windows.h>
int main(int argc, char* argv[])
{
_try
{
_try
{ }
_except(EXCEPTION_EXECUTE_HANDLER)
{ }
}
_finally
{ }
return 0;
}

MSC编译器会为每一个函数设置一个异常处理回调函数,此函数为_except_handlerX()。对于_except()而言,需要判断其括号中函数的返回值,其返回值一般为EXCEPTION_EXECUTE_HANDLER(可以处理此异常),EXCEPTION_COTINUE_SEARCH(不能处理此异常),EXCEPTION_CONTINUE_EXECUTION(此异常已经被处理)。当返回值为EXCEPTION_EXECUTE_HANDLER时就会执行_except()中的异常处理代码,对于_finally而言其内的代码总是会被执行。需要注意的是这几个返回值与我们在SEH异常处理函数的返回值不是一回事。

C++异常处理

#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
try
{
throw 1;
}
catch(int i)
{ }
return 0;
}

c++异常处理包括三个关键字try:监视异常,throw:抛出异常,catch:捕获异常。而且C++异常处理只能捕获throw产生的异常,因为throw会在内部调用kernel!RaiseException,并使用0xE06D7363"MSC"作为异常代码。C异常处理可以捕获我们所了解的中断异常,除零异常等异常。



C++异常处理也会为函数设置一个异常处理回调函数(代理函数),此函数为_CxxFrameHandlerX()。此函数与C异常处理中的异常回调函数_except_handlerX()作用相似,只不过其涉及到对象所以处理更复杂。

总结

因为MSC编译器只能为一个函数提供一个异常代理函数(C的_except_handlerX(),C++的_CxxFrameHandlerX()),所以同一个函数中不能同时使用C异常处理和C++异常处理。

C异常处理和C++异常处理的对比的更多相关文章

  1. C++复习8.异常处理和RTTI

    C++异常处理和RTTI技术 20130930 1.异常处理的基本知识 C语言中是没有内置运行时错误处理机制,对于错误发生的时候使用的几种处理机制: 函数返回彼此协商后统一定义的状态编码来表示操作成功 ...

  2. python之异常处理和re模块补充

    一.re模块的补充 1.从一个字符串中获取要匹配的内容 findall:返回一个列表 2.search ***** 验证用户输入内容 '^正则规则$':返回一个对象,用group()取值 3.matc ...

  3. 异常处理和UDP Socket套接字

    一.异常处理 1.什么是异常处理: 程序在运行过程中出现了不可预知的错误,并且该错误没有对应的处理机制,那么就会以异常的形式表达出来,造成的影响就是整个程序无法再正常进行. 2.异常的结构: 1.异常 ...

  4. 进击的Python【第七章】:python各种类,反射,异常处理和socket基础

    Python的高级应用(三)面向对象编程进阶 本章学习要点: 面向对象高级语法部分 静态方法.类方法.属性方法 类的特殊方法 反射 异常处理 Socket开发基础 一.面向对象高级语法部分 静态方法 ...

  5. php错误处理和php异常处理机制

    php错误处理  当我们开发程序时,有时候程序出现了问题,我们就可以用以下几种办法找出错误.  开发阶段:开发时输出所有的错误报告,有利于我们进行程序调试  运行阶段:我们不要让程序输出任何一种错误报 ...

  6. python基础之 异常处理和logging模块

    1.异常处理 l = ['apple','admin','kobe'] for id,item in enumerate(l,1): print(id,item) try: choose_id = i ...

  7. Python之异常处理和socket套接字连接7

    一.异常处理 1)异常处理的使用意义 什么是异常处理 异常是程序发生错误的信号,即程序一旦出错就会立刻产生一个异常,如果该异常没有被处理 那么异常就抛出来,程序的运行也随之终止 异常分为三部分: 异常 ...

  8. vb.net结构化异常处理和“邪用”

    vb.net中的错误处理包括两种:非结构化异常处理技术和结构化异常处理.非结构化异常处理技术在vb 6.0中使用的比较普遍,即通过Err对象和ON Error.Go To.Resume等语句来实现.这 ...

  9. Java第六次作业--异常处理和Java类集

    Deadline: 2017-5-4 23:00 一.学习要点 认真看书并查阅相关资料,掌握以下内容: 理解Java的异常处理机制 掌握捕获异常和声明抛出异常的方法 掌握List接口的实现类Array ...

随机推荐

  1. python-给一个参数n,例如3:先输出1,2,3,4,5,6,7,8,9,每三个数后换行,后输出1,4,7,2,5,8,3,6,9

    """ 2 定义一个函数,fn(n)其中n表示输入n行n列的矩阵,需要满足的要求是在n为 3时先输出 3 1 2 3 4 4 5 6 5 7 8 9 6 后输出 7 1 ...

  2. java常用算法笔记

    1.将一个10进制的c转换为n进制 String s=new BigInteger(c+"",10).toString(n); 2. 求一个解退出 System.exit(0): ...

  3. P1012 拼数(JAVA语言)

    //早起刷题傻一天 题目描述 设有nn个正整数(n≤20)(n≤20),将它们联接成一排,组成一个最大的多位整数. 例如:n=3n=3时,33个整数1313,312312,343343联接成的最大整数 ...

  4. python3 elf文件解析

    原地址:https://github.com/guanchao/elfParser 作者是用python2写的,现在给出我修改后的python3版本.(测试发现有bug,以后自己写个,0.0) 1 # ...

  5. 92反转链表II

    # Definition for singly-linked list.# 这道题还是有点复杂的,但是是有套路的,套用反转链表的想法class ListNode: def __init__(self, ...

  6. Vulkan移植GpuImage(二)Harris角点检测与导向滤波

    Harris角点检测 UI还是用的上次扣像的,只有前后置可以用,别的没有效果,只看实现就好. 相应源码 在实现之前,我先重新整理编译glsl的生成工具,如Harris角点检测中间计算过程需要针对rgb ...

  7. JAVA题目:正整数n若是其平方数的尾部,则称n为同构数 如:5*5=25, 25*25=625 问: 求1~99中的所有同构数

    1 /*题目:正整数n若是其平方数的尾部,则称n为同构数 2 如:5*5=25, 25*25=625 3 问: 求1~99中的所有同构数 4 */ 5 //分析:将1-99分为1-9和10-99,用取 ...

  8. SIP (Session Initiation Protocol) 协议

    Session Initiation Protocol 介绍 SIP是VoIP技术最常使用的协议,它是一种应用程序层协议,可与其他应用程序层协议配合使用,以控制Internet上的多媒体通信会话. V ...

  9. DevOps教程:DevOps 面试题

     [注]本文译自:https://www.javatpoint.com/devops-interview-questions

  10. 又一起.NET程序挂死, 用 Windbg 抽丝剥茧式的真实案例分析

    一:背景 1. 讲故事 前天有位粉丝朋友在后台留言让我帮忙看看他的 Winform程序 UI无响应 + 410线程 到底是啥情况,如下图: 说实话,能看到这些真实案例我是特别喜欢的 ,就像医生看病,光 ...