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

相關文章
相關標籤/搜索