C标准函数setjmp和longjmp

setjmp函数

#include <setjmp.h>
int setjmp(jmp_buf env) 

setjmp函数可以把jmp_buf结构的变量env保存起来,并返回一个int为0的值。

 

longjmp函数

void longjmp(jmp_buf env, int val);

longjmp函数把setjmp函数上一次保存的变量env还原,并返回一个int为val的值。

 

异常处理

jmp_buf env;

double divide(double div, double by) {
    if(by == 0)
        longjmp(env, 1);
    return div / by;
}

void f() {
    if(setjmp(env) == 0)
        divide(2, 0);
    else
        printf("cannot divide 0");
}

或者

jmp_buf env;

void raise_exception() {
    longjmp(env, 3); /* jump to case 3 */
}

void f() {
    switch (setjmp(env)) {
    case 0:
        printf("setjmp is initializing\n");
        raise_exception();
    case 1:
        printf("Case 1\n");break;
    case 2:
        printf("Case 2\n");break;
    case 3:
        printf("Case 3\n");break;
    default:
        break;
    }
}                            

 

posted @ 2022-01-09 16:33  程序小喵  阅读(37)  评论(0编辑  收藏  举报