首页 > 代码库 > setjmp与longjmp

setjmp与longjmp

这里有编写了很好的文章:http://blog.csdn.net/cscmaker/article/details/7584433,我自己试了一个小例子。

#include <setjmp.h>
#include <stdio.h>

void my_print(const char *str, jmp_buf jb)
{
    printf("in my_print()\n");

    if (str == NULL) {
        longjmp(jb, 2);
    }
    printf("my_print: %s\n", str);
}

int main()
{
    int ret = 0;
    char *str = NULL;

    jmp_buf jbuf;
    int jmp_ret = setjmp(jbuf);
    if (jmp_ret == 2) {
        printf("ERROR: name == NULL\n");
        str = "Hevake";
    }
    my_print(str, jbuf);

    return 0;
}

输出结果是:

in my_print()
ERROR: name == NULL
in my_print()
my_print: Hevake


我们可以用setjmp与longjmp实现类似异常处理的功能。

setjmp与longjmp