zoukankan      html  css  js  c++  java
  • 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 ", result);

        }

        else if (jstatus == -3)

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

        else

            printf("Unhandled Error Case");

    }

  • 相关阅读:
    evernote100个做笔记的好方法
    平衡二叉树的调整模版
    晨间日记的奇迹
    hdu 2952 Counting Sheep
    hdu 1535 Invitation Cards
    poj 3259 Wormholes(spfa)
    poj 2263 Heavy Cargo(floyd)
    poj 3268 Silver Cow Party(SPFA)
    hdu 1690 Bus System
    hdu 3631 Shortest Path(Floyd)
  • 原文地址:https://www.cnblogs.com/quansir/p/4728129.html
Copyright © 2011-2022 走看看