码迷,mamicode.com
首页 > 其他好文 > 详细

goto语句的升级版,setjmp,longjmp

时间:2017-10-08 14:47:22      阅读:167      评论:0      收藏:0      [点我收藏+]

标签:set   image   test   库函数   信息   turn   循环   art   测试   

我们知道goto语句是不能跳过函数的,但是在我么C语言的应用中,在不使用汇编的情况下,遇到需要跳出深层循环比如检错机制的时候,有确实想要跨函数跳转,有没有上面办法可以做到呢?

这就是今天要讲的两个库函数,setjmp和longjmp.

先看例子:

#include<stdio.h>
#include<setjmp.h>
void test(void);
jmp_buf restart;
int main(void)
{
    int num, value;
    
    int i = 0;
    value = setjmp(restart);//不管调用多少次,value都为0(只要没调用longjmp函数)
    while (value == 1)
    {

        i++;
        printf("test success\n");
        if (i > 10)
        {
            i = 0;
            value = 0;
        }
    }
    while (1)
    {
        printf("输入数字 1 打印right,输入数字 2 ,模拟错误信息,观察打印信息\n");
        scanf("%d", &num);
        switch (num)
        {
        case 1:printf("right\n"); num = 0; break;
        case 2:printf("err\n"); num = 0; test(); break;

        }

    }

    return 0;
}
void test(void)
{
    int num;
    printf("输入数字 1 测试跳转\n");
    scanf("%d", &num);
    if (num == 1)
        longjmp(restart, 1);
}

技术分享

通过上面的测试代码和输出数据,我们可以看到longjmp跳转实现了跨函数,而goto语句是做不到的.

goto语句的升级版,setjmp,longjmp

标签:set   image   test   库函数   信息   turn   循环   art   测试   

原文地址:http://www.cnblogs.com/yangguang-it/p/7637329.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!