setjmp与 longjmp

#inlcude <setjmp.h>
#include <stdio.h>
jmp_buf buf;

void b()
{
    printff("a\n");
    longjmp(buf,1);    //  longjmp(buf,i) 返回值为i
    printff("b\n");
}

int main()
{
    int ga;
    ga = setjmp(buf);   //设置成功会初始值为0,跳到这的时候返回值为 longjmp设置的i
    if(ga)
    {
        printf("1\n");
    }
    else
    {
        b();
    }
    return 0;
}

须要注意的是:保证局部变量在longjmp过程当中一直保持它的值惟一可靠的方法是把他声明为:volatile。-适用于那些值在setjmp和longjmp之间会改变的变量。code

setjmp/longjmp 最大的用途是错误恢复。一旦发现一个不可恢复的错误,能够把控制转移到主输入循环。io

相关文章
相关标签/搜索