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


目录
相关文章
|
4月前
|
程序员 C++
C 标准库 - <setjmp.h>详解
`&lt;setjmp.h&gt;` 是 C 标准库中的头文件,用于处理程序的非局部跳转。它提供了 `setjmp` 和 `longjmp` 函数,允许程序保存和恢复执行状态,适用于错误处理和复杂控制流(如协程)。主要概念包括跳转和上下文保存。使用时需注意局部变量作用域、不对称性及避免滥用。
74 11
|
5月前
|
API C语言
setjmp和longjmp
setjmp和longjmp
|
8月前
|
存储 安全 C语言
在C++ 中慎用setjmp和longjmp
在C++ 中慎用setjmp和longjmp
60 0
|
8月前
|
C语言
<C语言错误处理> 非局部跳转<setjmp.h>头文件
<C语言错误处理> 非局部跳转<setjmp.h>头文件
|
存储 Java C#
【C语言】strerror函数和malloc函数
我的第一门语言就是C,但是学艺不精,中途跑去学了C#和Java后,感觉到了C的重要性,毕竟是最接近底层的语言,又跑回来学C。 毕竟前两门的控制语句,变量什么的都是类似的,回到C后只需要学习一些特定C的语法,比如宏,预编译指令等等,这些对我来说都是陌生的词汇。 前来记录一下陌生的东西。
179 0
|
物联网 Linux 开发者
signal 函数返回值|学习笔记
快速学习 signal 函数返回值
|
前端开发
async函数
async函数
84 0