C 标准库
来源:互联网 发布:部落冲突x升级数据 编辑:程序博客网 时间:2024/06/14 17:17
简介
setjmp.h 头文件定义了宏 setjmp()、函数 longjmp() 和变量类型 jmp_buf,该变量类型会绕过正常的函数调用和返回规则。
库变量
下面列出了头文件 setjmp.h 中定义的变量:
这是一个用于存储宏 setjmp() 和函数 longjmp() 相关信息的数组类型。
库宏
下面是这个库中定义的唯一的一个宏:
这个宏把当前环境保存在变量 environment 中,以便函数 longjmp() 后续使用。如果这个宏直接从宏调用中返回,则它会返回零,但是如果它从 longjmp() 函数调用中返回,则它会返回一个非零值。
库函数
下面是头文件 setjmp.h 中定义的唯一的一个函数:
该函数恢复最近一次调用 setjmp() 宏时保存的环境,jmp_buf 参数的设置是由之前调用 setjmp() 生成的。
C 库宏 - setjmp()
描述
C 库宏 int setjmp(jmp_buf environment) :创建本地的jmp_buf缓冲区并且初始化,用于将来跳转回此处。这个子程序保存程序的调用环境于env参数所指的缓冲区,env将被longjmp使用。如果是从setjmp直接调用返回,setjmp返回值为0。如果是从longjmp恢复的程序调用环境返回,setjmp返回非零值。
声明
下面是 setjmp() 宏的声明。
int setjmp(jmp_buf environment)
参数
- environment – 这是一个类型为 jmp_buf 的用于存储环境信息的对象。
返回值
这个宏可能不只返回一次。第一次,在直接调用它时,它总是返回零。当调用 longjmp 时带有设置的环境信息,这个宏会再次返回,此时它返回的值会传给 longjmp 作为第二个参数。
实例
下面的实例演示了 setjmp() 宏的用法。
#include <stdio.h>#include <setjmp.h>static jmp_buf buf;void second(void) { printf("second\n"); // 打印 longjmp(buf,1); // 跳回setjmp的调用处 - 使得setjmp返回值为1}void first(void) { second(); printf("first\n"); // 不可能执行到此行}int main() { if ( ! setjmp(buf) ) { first(); // 进入此行前,setjmp返回0 } else { // 当longjmp跳转回,setjmp返回1,因此进入此行 printf("main\n"); // 打印 } return 0;}
让我们编译并运行上面的程序,这将产生以下结果:
secondmain
C 库函数 - longjmp()
描述
C 库函数 void longjmp(jmp_buf environment, int value) 恢复最近一次调用 setjmp() 宏时保存的环境,jmp_buf 参数的设置是由之前调用 setjmp() 生成的。
声明
下面是 longjmp() 函数的声明。
void longjmp(jmp_buf environment, int value)
参数
- environment – 这是一个类型为 jmp_buf 的对象,包含了调用 setjmp 时存储的环境信息。
- value – 这是 setjmp 表达式要判断的值。
返回值
该函数不返回任何值。
实例
下面的实例演示了 longjmp() 函数的用法。
#include <stdio.h>#include <setjmp.h>static jmp_buf buf;void second(void) { printf("second\n"); // 打印 longjmp(buf,1); // 跳回setjmp的调用处 - 使得setjmp返回值为1}void first(void) { second(); printf("first\n"); // 不可能执行到此行}int main() { if ( ! setjmp(buf) ) { first(); // 进入此行前,setjmp返回0 } else { // 当longjmp跳转回,setjmp返回1,因此进入此行 printf("main\n"); // 打印 } return 0;}
让我们编译并运行上面的程序,这将产生以下结果:
secondmain
阅读全文
0 0
- C标准库“圣经”:C标准库
- 标准c++ 库
- C标准库[转]
- C标准库
- (不错)C标准库
- C标准库
- C语言标准库
- C标准库“圣经”
- 解读《C标准库》
- C标准库
- c 标准库
- c标准库
- c标准库
- C标准库断言
- C标准库
- C 标准库
- C标准库
- C标准库
- 酷科技 | Moto Z2 Force 模块化智能手机
- java并发编程学习(七) volatile的内存语义
- 重磅 | 嘉年华:2017中国通信产业大会(CCIC2017)与你相约12月
- 小区
- Error:Execution failed for task ':app:transformClassesWithDexForDebug'. > com.android.build.api.tran
- C 标准库
- SQL中distinct的用法
- RETON 17寸8口液晶KVM
- 第十周 项目3
- 微信小程序-实现省市区三级联动
- 好的MongoDB中文文档
- 2017-11-29 黑科技
- iOS学习地址
- IIC 通讯协议