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实现类似异常处理的功能。


目录
相关文章
|
1月前
|
API C语言
setjmp和longjmp
setjmp和longjmp
|
1月前
|
编译器 C语言
C语言函数
C语言函数
20 5
|
3月前
|
编译器 C语言 C++
初识c语言函数
初识c语言函数
17 0
|
4月前
|
存储 安全 C语言
在C++ 中慎用setjmp和longjmp
在C++ 中慎用setjmp和longjmp
40 0
|
4月前
|
Unix Linux C语言
【C/C++ 跳转函数】setjmp 和 longjmp 函数的巧妙运用: C 语言错误处理实践
【C/C++ 跳转函数】setjmp 和 longjmp 函数的巧妙运用: C 语言错误处理实践
76 0
|
C语言
对C语言函数的初步认识(下)
对C语言函数的初步认识(下)
对C语言函数的初步认识(下)
|
存储 程序员 编译器
C语言函数基本
在数学中,我们经常会使用函数,比如f(x) = x + 1,这就是数学中的函数,当自变量x给定一个数时因变量就会对应计算出。c语言中的函数与数学中的函数也大同小异,给定不同的值也会对应计算出相对应的值。维基百科里对函数的定义称为:子程序(是一个大型程序中的某部分代码,由一个或多个语句块组成。它负责完成某项特定的任务,具有相对独立性的特点)
72 0
|
算法 编译器 C语言
C语言函数详解(二)
C语言函数详解(二)
|
算法 程序员 C语言
C语言函数详解(一)
本文将介绍C语言中关于函数的用法,并配有大量图解供大家学习,学习没有捷径,有的图解可能比较复杂,认真看下去一定会有所帮助,希望博主的努力能帮助到函数不好的同学
|
存储 Java C#
【C语言】strerror函数和malloc函数
我的第一门语言就是C,但是学艺不精,中途跑去学了C#和Java后,感觉到了C的重要性,毕竟是最接近底层的语言,又跑回来学C。 毕竟前两门的控制语句,变量什么的都是类似的,回到C后只需要学习一些特定C的语法,比如宏,预编译指令等等,这些对我来说都是陌生的词汇。 前来记录一下陌生的东西。
156 0