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之间会改变的变量。

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

猜你喜欢

转载自my.oschina.net/u/2252538/blog/1788751
今日推荐