C 语言中 setjmp 和 longjmp( 三 )
如果你读过 Linux 操作系统进程切换的源码 , 你会很明白 Linux 会把进程的上下文保存在 task_struct 结构体中 , 切换时直接恢复 。 这里我们也可以这样做 , 将 Label 处的函数上下文保存在某个结构体中 , 但执行到 GOTO Label 语句时 , 我们从该结构体中恢复函数的上下文 。
这就是函数间进行跳转的基本原理 , 而 C 语言中 setjmp 和 longjmp 就为我们完成了这样的保存上下文和切换上下文的工作 。
函数原型
#include <setjmp.h>
intsetjmp(jmp_bufenv);
setjmp 函数的功能是将函数在此处的上下文保存在 jmp_buf 结构体中 , 以供 longjmp 从此结构体中恢复 。
参数 env 即为保存上下文的 jmp_buf 结构体变量;
如果直接调用该函数 , 返回值为 0;若该函数从 longjmp 调用返回 , 返回值为非零 , 由 longjmp 函数提供 。 根据函数的返回值 , 我们就可以知道 setjmp 函数调用是第一次直接调用 , 还是由其它地方跳转过来的 。
推荐阅读
- msi|DK碾压C9拿到MSI首胜,但却暴露了一个问题,姿态赛前一言中的!
- 5G|美方刚换了5G新策略,中国移动就宣布大消息,任正非言中了
- 美国突然宣布,弱点终被暴露,任正非早就言中!
- 是哗众取宠还是泄露天机?美国最知名算命婆,临终前这般预言中国
- C/C++编程笔记:浅析 C 语言中宏定义的使用,知识点全解
- 为什么C语言中的字符串可以用指针表示?
- 王思聪言中?美股上市不到半年股价腰斩,如涵控股或遭投资者集体诉讼
- 在爱因斯坦众多预言中,还曾预言了中国,如今已应验证明他的远见
- 语特欧亚全语言中心在苏州正式起航
- 玛雅文明的5个预言中,有4个已应验,为何唯独2012错了?