setjmp and longjmp

1414阅读 0评论2009-12-24 nanqihao
分类:C/C++

setjmp and longjmp
 

#include <stdio.h>
#include <setjmp.h>
jmp_buf mark;
void Func1()
{
    // 其它代码的执行

    // 判断程序远行中,是否出现错误,如果有错误,则跳转!

    if(1) longjmp(mark, 1);
}

void Func2()
{
    // 其它代码的执行

    // 判断程序远行中,是否出现错误,如果有错误,则跳转!

    if(2) longjmp(mark, 2);
}

void Func3()
{
    // 其它代码的执行

    // 判断程序远行中,是否出现错误,如果有错误,则跳转!

    if(-1) longjmp(mark, -1);
}

int main(int argc, char* argv[])
{
    int jmpret;
    jmpret = setjmp( mark );
    if( jmpret == 0 )
    {
        // 其它代码的执行

        // 下面的这些函数执行过程中,有可能出现异常

        Func1();
        Func2();
        Func3();
        // 其它代码的执行

    }
    else
    {
        // 错误处理模块


        switch (jmpret)
        {
        case 1:
            printf( "Error 1\n");
            break;
        case 2:
            printf( "Error 2\n");
            break;
        case 3:
            printf( "Error 3\n");
            break;
        default :
            printf( "Unknown Error");
            break;
        }
        exit(0);
    }

    return 0;
}


上一篇:lex 和 yacc
下一篇:[vim和gvim技巧]技巧大全(1)