zoukankan      html  css  js  c++  java
  • goto语句的升级版,setjmp,longjmp

    我们知道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
    ");
            if (i > 10)
            {
                i = 0;
                value = 0;
            }
        }
        while (1)
        {
            printf("输入数字 1 打印right,输入数字 2 ,模拟错误信息,观察打印信息
    ");
            scanf("%d", &num);
            switch (num)
            {
            case 1:printf("right
    "); num = 0; break;
            case 2:printf("err
    "); num = 0; test(); break;
    
            }
    
        }
    
        return 0;
    }
    void test(void)
    {
        int num;
        printf("输入数字 1 测试跳转
    ");
        scanf("%d", &num);
        if (num == 1)
            longjmp(restart, 1);
    }

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

    更多细节待续。。。

  • 相关阅读:
    word-wrap和word-break的区别
    transform 二维转变
    过渡
    新闻下滑导航案例
    background-origin,clip
    边框图片
    背景样式
    线性渐变与径向渐变与重复渐变
    边框阴影
    盒模型和圆角
  • 原文地址:https://www.cnblogs.com/yangguang-it/p/7637329.html
Copyright © 2011-2022 走看看