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");

    }

  • 相关阅读:
    2019春季第五周作业
    2019春第四周作业(基础题)计算机
    2019第三周作业
    第二周基础作业
    2019春第九周作业
    2019年春第八周作业
    第七周总结
    第六周作业
    2019春第五周作业
    2019年春季学期第四周作业
  • 原文地址:https://www.cnblogs.com/quansir/p/4728129.html
Copyright © 2011-2022 走看看