zoukankan      html  css  js  c++  java
  • c语言的jmp_buf函数

    #include<setjmp.h>
    #include<stdio.h>
    #include<stdlib.h>
    static jmp_buf buf;

    main() 
    {
    volatile int b;
    b =3;

    if(setjmp(buf)!=0) 
    {
    printf("%d ", b); 
    exit(0);
    }
    b=5;
    longjmp(buf , 1);

    setjmp和logjmp是配合使用的,用它们可以实现跳转的功能,和goto语句很类似,不同的是goto只能实现在同一个函数之内的跳转,而setjmp和logjmp可以实现在不同函数间的跳转

    用法:

    1. 首先用setjmp设置跳转的地点,setjmp的参数buf是用来保存设置跳转点时的函数使用的重要数据,当从其他函数跳转回来,如果不用这个保存的数据恢复当前函数的一些数据的话,跳转回来是不能运行的。第一次设置的时候setjmp返回值为0

    2. 使用longjmp就可以跳转到setjmp的地方了,参数buf就是使用setjmp的时候保存的,而第二个参数会在跳转以后把这个值让setjmp返回的,也就是longjmp第二个参数,就是跳转到setjmp之后setjmp函数要返回的值

    这个代码里运行步骤

    1.先执行setjmp,因为是第一次设置跳转点,返回值是0,不执行if语句块里的语句,

    2.然后执行b=5,b的值就是5了

    3.再执行longjmp跳转之后, 最后再执行setjmp, 这时setjmp会返回1(也就是longjmp的第二个参数指定的值),就会执行if语句块里的语句----打印之后终止程序,这时b的值是5,就会打印出5来

  • 相关阅读:
    操作系统、存储介质以及电信行业单位换算差异
    Luogu P1659 [国家集训队]拉拉队排练
    AC自动机
    KMP
    Luogu P1470 最长前缀 Longest Prefix
    Luogu P2292 [HNOI2004]L语言
    Manacher算法
    字典(Trie)树
    逆序对
    vs
  • 原文地址:https://www.cnblogs.com/shamoguzhou/p/7861489.html
Copyright © 2011-2022 走看看