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


目录
相关文章
|
6月前
|
程序员 C++
C 标准库 - <setjmp.h>详解
`&lt;setjmp.h&gt;` 是 C 标准库中的头文件,用于处理程序的非局部跳转。它提供了 `setjmp` 和 `longjmp` 函数,允许程序保存和恢复执行状态,适用于错误处理和复杂控制流(如协程)。主要概念包括跳转和上下文保存。使用时需注意局部变量作用域、不对称性及避免滥用。
100 10
|
7月前
|
API C语言
setjmp和longjmp
setjmp和longjmp
|
10月前
|
存储 安全 C语言
在C++ 中慎用setjmp和longjmp
在C++ 中慎用setjmp和longjmp
69 0
|
10月前
|
C语言
指针函数和函数指针
指针函数和函数指针
65 0
|
编解码 Cloud Native 网络协议
【C/C++】函数指针与指针函数
函数指针是指向函数的指针变量。 因此函数指针本质上是一个指针变量,只不过该指针变量指向函数。指针变量也可以指向整型变量、字符型、数组,也可以指向函数。
160 0
浅谈sscanf陷阱
sscanf虽然是个不错的函数,它可以很简单的将字符串转成特定的格式,比如转成整数、浮点数等等。但是如果使用不慎,会带来很大的麻烦。
|
编译器 程序员 API
函数调用约定:__stdcall、__cdecl和__fastcall介绍
函数调用约定:__stdcall、__cdecl和__fastcall介绍
194 0