c语言捕捉异常

闲暇之日阅读lua源码,发现原来C语言除goto之外的另一个处理异常的方法。既为setjump longjump两个函数,setjump相当于try,longjump相当于catch。与goto不同的是,longjump是全局的,比goto的作用范围更广。下面贴出简单用法:

#include <stdlib.h>

#include <setjmp.h>

jmp_buf jumper;

int fdf(int a, int b) {

if (b == 0)

{ // can‘t divide by 0

longjmp(jumper, -3);//跳到以jumper 所在的jmp point,进行处理,-3 相当于具体的exception code.

}

return a / b;

}

int main (int argc, char **argv)

{

int jstatus = setjmp(jumper);//相当于java catch,如果发生 jumper 异常,那么会跳回到这个jmp point

if (jstatus == 0) {//第一次执行的时候是正确的setjmp return 0.

int a = 1;

int b = 0;

printf("%d/%d", a, b);

int result = fdf(a, b);

printf("=%d\n", result);

}

else if (jstatus == -3)

printf(" --> Error:divide by zero\n");

else

printf("Unhandled Error Case");

}

时间: 2024-08-28 11:38:43

c语言捕捉异常的相关文章

python 捕捉异常

Python中的捕捉异常 (try  except ) 语句: try: #把你要执行的代码放进来 ..... ..... except: #比如try上面的代码出现了异常,就会来到这里 #我们可以打印一句话 print ('error') --------------------------------------------------------------- 又或者说 try: #把你要执行的代码放进来 ..... ..... except typeError as reason #类型

【R笔记】使用R语言进行异常检测

本文转载自cador<使用R语言进行异常检测> 本文结合R语言,展示了异常检测的案例,主要内容如下: (1)单变量的异常检测 (2)使用LOF(local outlier factor,局部异常因子)进行异常检测 (3)通过聚类进行异常检测 (4)对时间序列进行异常检测 一.单变量异常检测 本部分展示了一个单变量异常检测的例子,并且演示了如何将这种方法应用在多元数据上.在该例中,单变量异常检测通过boxplot.stats()函数实现,并且返回产生箱线图的统计量.在返回的结果中,有一个部分是o

21、捕捉异常和异常的使用原则

package com.exception.demo; public class Take { // 创建类 /** * 1.捕捉异常( 异常处理器大致分为 try-catch 语句快 和 finally 语句块 ) * 2.以下4种情况不会执行finall语句块 * 2.1.在finally语句块发生了异常 * 2.2.在前面的代码中使用了 System.exit() 退出程序 * 2.3.程序所在的线程死亡 * 2.4.关闭CPU * 3.异常的使用原则: * 1.在当前方法中使用 try

idhttp post 出现exception class EIdSocketError with message &#39;Socket Error # 10054的解决办法(捕捉异常,防止程序挂掉)

由于项目需要.需要向一个地址提交数据.提交的次数很频繁,但是程序经常raised exception class EIdSocketError with message 'Socket Error # 10054Connection reset by peer.' 造成程序异常,停止工作.    于是找到以下解决办法.Exception捕获不到该异常.需要用EIdException来捕获异常.    IDE环境: Delphi XE3 Version 17.0.4625.53395     IN

Java try-catch自定义捕捉异常

题目要求:输入数值,90-100输出“优”,80-90输出“良”,70-80输出“中”,60-70输出“及格”,0-60输出“不及格”,输入其他捕捉异常并提示相应信息. 代码如下: 1 import java.util.Scanner; 2 3 @SuppressWarnings("serial") 4 //自定义异常类 5 class TryException extends Exception 6 { 7 /** 8 * 9 */ 10 private static final l

springmvc mybatis 声明式事务管理回滚失效,(checked回滚)捕捉异常,传输错误信息

一.知识点及问题 后端框架: Spring .Spring mvc .mybatis 业务需求: client先从服务端获取用户大量信息到client,编辑完毕之后统一Post至服务端,对于数据的改动要么全成功,要么全失败,所以须要使用事务支持. 问题: 配置Spring声明式事务,运行中出现异常未回滚.从网上查询得到一開始是自己的配置出了问题,因为配置文件的载入顺序决定了容器的载入顺序导致Spring事务没有起作用. 详情例如以下: 因为採用的是SpringMVC. MyBatis,故统一採用

什么时候抛异常什么时候捕捉异常?

之前面试遇到这样一个问题,异常有两种处理方式,一种是直接捕捉try catch,一种是直接往外抛throws,那么这两种方式都是什么情况下使用呢 当时一下没反应过来,工作中大多数都是直接捕获,后面才了解到首先你要弄清楚这个功能的位置: 如果这个方法没有人调用,则一定要捕捉不然就抛到jvm来处理了(比如Controller层一般都是要对异常进行捕捉,该打日志的打,该抛前台的抛) 有其他调用者要使用你这个方法,如果这个异常信息是不需要让调用者知道的就直接捕获,比如时间转换用到SimpleDateFo

捕捉异常

import java.io.*; import text.MyException; public class Yichang { public static void main(String[] args) { //捕获异常 //抛出异常 throw 写在方法体里面 throws 写在方法名字的后面 表示将方法里的异常抛出,抛给它的调用者 try { int r = 3 / 1; System.out.println("结果 = " + r); Exception ex = new

Python3 捕捉异常

可以通过try/except语句来实现捕获异常,如下: bpython version 0.15 on top of Python 3.5.1+ /usr/bin/python3 >>> x=3 >>> y=0 >>> x/y Traceback (most recent call last): File "<input>", line 1, in <module> x/y ZeroDivisionError