2022 0603

简介

#简介
除法运算除数为0时恢复堆栈处理

#编译
gcc div.c
#运行
./a.out
输入 8 0 会恢复堆栈

代码

//div.c

#include<stdio.h>
#include<string.h>
#include<unistd.h>
#include<sys/signal.h>
#include<setjmp.h>

#define N 2

static jmp_buf env;

//除法错误信号函数
static void div_error(int sig);

int main() {
    signal(SIGFPE, div_error);
    for(int i = 0; i < N; i++) {
        sigsetjmp(env,1);
        printf("请输入x,y\n");
        int x, y;
        scanf("%d %d", &x, &y);
        printf("正在计算x/y ...\n");
        sleep(2);
        int ret = x / y;
        printf("计算结果为:%d\n", ret);
    }
    return 0;
}

static void div_error(int sig)
{
    printf("除数为0 打断\n");
    siglongjmp(env, 1);
}
posted on 2022-06-03 10:38  彼岸花不开彼岸  阅读(50)  评论(0)    收藏  举报