Chinaunix首页 | 论坛 | 博客

  • 博客访问: 480554
  • 博文数量: 86
  • 博客积分: 2010
  • 博客等级: 大尉
  • 技术积分: 878
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-06 14:11
文章分类

全部博文(86)

文章存档

2010年(12)

2009年(60)

2008年(14)

我的朋友

分类: C/C++

2009-12-24 08:26:49

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;
}


阅读(1381) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~