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


目录
相关文章
|
9月前
|
C语言
【C指针(五)】6种转移表实现整合longjmp()/setjmp()函数和qsort函数详解分析&&模拟实现1
【C指针(五)】6种转移表实现整合longjmp()/setjmp()函数和qsort函数详解分析&&模拟实现
|
4月前
利用指针函数
【10月更文挑战第2天】利用指针函数。
32 1
|
5月前
|
程序员 C++
C 标准库 - <setjmp.h>详解
`&lt;setjmp.h&gt;` 是 C 标准库中的头文件,用于处理程序的非局部跳转。它提供了 `setjmp` 和 `longjmp` 函数,允许程序保存和恢复执行状态,适用于错误处理和复杂控制流(如协程)。主要概念包括跳转和上下文保存。使用时需注意局部变量作用域、不对称性及避免滥用。
94 10
|
6月前
|
API C语言
setjmp和longjmp
setjmp和longjmp
|
9月前
|
存储 算法 API
指针函数
指针函数
51 0
|
9月前
|
存储 安全 C语言
在C++ 中慎用setjmp和longjmp
在C++ 中慎用setjmp和longjmp
65 0
|
9月前
|
C语言
指针函数和函数指针
指针函数和函数指针
58 0
|
编解码 Cloud Native 网络协议
【C/C++】函数指针与指针函数
函数指针是指向函数的指针变量。 因此函数指针本质上是一个指针变量,只不过该指针变量指向函数。指针变量也可以指向整型变量、字符型、数组,也可以指向函数。
155 0
|
Linux 调度
vfork() 函数
vfork() 函数
93 0