C异常处理方法

C异常处理方法,第1张

C异常处理方法

1.C语言的异常处理利用的是longjmp

longjmp 与goto的作用类似,但作用域差异很大。

longjmp不限于函数内部。

2.使用时需要使用c标准库中的setjmp.h

jmp_buf 是setjmp.h中定义的一个结构体

使用时,先实例化一个结构体

利用setjmp来进行赋值。setjmp返回0则实例化成功。

然后再利用longjmp进行对应的跳转。

跳转的到的地方即setjmp()的地方,其setjmp的返回值对应的就是longjmp的第二个参数。

2.举个例子:

#include
#include
#include

jmp_buf errBuf;

void checkJmpFlag(int jmpFlag);

void sendErr();

int main(){
    int jmpFlag=setjmp(errBuf);
    checkJmpFlag(jmpFlag);
    sendErr();
    return 0;
}

void checkJmpFlag(int jmpFlag){
    if(jmpFlag==0){
    }
    else{
        printf("Error: JmpFlag");
        exit(-1);
    }
}

void sendErr(){
    longjmp(errBuf,-5);
}

对应的输出如下

$ ./testLongJmp
Error: JmpFlag

3. 注意:

longjmp似乎只能向前跳转无法向后跳转。

对应的测试例子

#include
#include
#include

jmp_buf errBuf;

void checkJmpFlag(int jmpFlag);

void sendErr();

int main(){
    sendErr();
    int jmpFlag=setjmp(errBuf);
    checkJmpFlag(jmpFlag);
    return 0;
}

void checkJmpFlag(int jmpFlag){
    if(jmpFlag==0){
    }
    else{
        printf("Error: JmpFlag");
        exit(-1);
    }
}

void sendErr(){
    longjmp(errBuf,-5);
}

输出结果

$ ./testLongJmp

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5714443.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存