头文件<setjmp.h>定义了宏setjmp,并且为了绕过正常的函数调用和返回规则声明了一个函数和一个类型。

1、类型jmp_buf

它是一个数组类型,适合存储恢复一个调用环境所需的信息。

2、宏setjmp

int setjmp(jmp_buf env);

说明:宏setjmp将它的调用环境保存在它的jmp_buf类型的参数中,以供后面longjmp使用。

返回值:如果返回一个来自直接的调用,则宏setjmp返回0;如果返回一个来自longjmp的调用,则宏setjmp返回一个非0值。

3、函数longjmp

void longjmp(jmp_buf enb,int val);

说明:函数longjmp使用jmp_buf参数来恢复宏setjmp最近一次调用保存的环境;如果没有这样的调用或包含宏setjmp调用的函数已经在其前终止执行,则行为未定义。

返回值:在longjmp完成之后,程序会继续执行。函数longjmp不能让宏setjmp返回0,如果val是0,则宏setjmp返回1。

例:

#include <setjmp.h>
#include <stdio.h>

static jmp_buf buf;
void second();

void first()
{
printf("%c\n",buf[0]);  //
second();
printf("first function\n");  //不会执行
}

void second()
{
printf("second function\n");
longjmp(buf,3);  //跳到setjmp,并设置setjmp的返回值为3
}

void main()
{
if(!setjmp(buf))  //直接调用宏setjmp时返回0,并将执行环境保存在buf中
first();
else
printf("main function\n");
}

结果:

h
second function
main function

转载于:https://www.cnblogs.com/Mr-Wenyan/p/7219875.html

头文件setjmp.h相关推荐

  1. BST(binary search tree)类型题目需要用到的头文件binary_tree.h

    下面是二叉搜索树需要用到的头文件binary_tree.h #include <stdio.h>struct BinaryTreeNode{int value;BinaryTreeNode ...

  2. tree类型题目需要用到的头文件tree.h

    下面是树类型题目需要用到的头文件tree.h,请包含在cpp文件中编译,而不是放在c文件中编译,比如查找树中两个节点的最低公共父结点的题common_parent_in_tree.cpp,编译它的方法 ...

  3. vs项目中头文件(.h)静态库(.lib)和 动态库(.dll )的路径和配置

    在程序开发中,很多时候需要用到别人开发的工具包,如OpenCV和itk.一般而言,在vs中,很少使用源文件,大部分是使用对类进行声明的头文件(.h)和封装了类的链接库(静态.lib或动态.dll).如 ...

  4. 【转】C++中#include包含头文件带 .h 和不带 .h 的区别

    C++中#include包含头文件带 .h 和不带 .h 的区别? 如 #include <iostream> 和 #include <iostream.h> 包含的东西有哪些 ...

  5. Microsoft Visual Studio下编译缺少头文件unistd.h解决办法

    许多在Linux下开发的C程序都需要头文件unistd.h,但VC中没有个头文件, 所以用VC编译总是报错.把下面的内容保存为unistd.h,可以解决这个问题. /** This file is p ...

  6. 【C++】C++中的头文件(.h)—详解(2)

    接上... [fishing-pan:https://blog.csdn.net/u013921430转载请注明出处] 头文件中写些什么 在上篇博客中写到头文件本身不参与编译,但是它们被包含到源文件中 ...

  7. 【C++】C++中的头文件(.h)—详解(1)

    [fishing-pan:https://blog.csdn.net/u013921430转载请注明出处] 前言 之前写过一篇<C++中头文件的使用>,那篇文章主要讲述C++中头文件的使用 ...

  8. C11头文件threads.h声明了创建和管理线程,信号,条件变量的函数

    作者Danny Kalev 是通过以色列系统分析师协会认证的系统分析师, 并且是专攻C++的软件工程师. Kalev 写了多本C++的书籍,同时给不同的软件开发者站点投搞C++文章. 他是C++标准委 ...

  9. C语言两个同名头文件,C lang: C语言中两个头文件引入相同的头文件(Header.h)

    C lang: C语言中两个头文件引入相同的头文件(Header.h) C lang: C语言中两个头文件引入相同的头文件(Header.h) [var1] For example: Header.h ...

最新文章

  1. mysql 5.7 修改root 密码
  2. BZOJ4298 : [ONTAK2015]Bajtocja
  3. fft谱分析的误差有哪些原因造成的?如何减小分析误差。_回归分析 | 闯荡数据江湖的武功秘籍...
  4. 【Linux】Linux crontab 命令详解
  5. 85JS原生:数组4种去重方法
  6. NFS网络文件共享系统-综合架构NO.2
  7. GitHub使用入门讲解--官方文档翻译让你最真实了解
  8. 使用dig或nslookup指定dns服务器查询域名解析
  9. 利用Update Manager将ESXi 5.1 Update2升级为ESXi 6.5 Update1
  10. oracle 用户表、字段信息
  11. cocos2d-x学习笔记07:在cocos2d-x中使用RTTI
  12. php 判断3g,php 3g{WAp}网站编写注意事项
  13. 数论基础--欧几里得算法
  14. 《东周列国志》第三十六回 晋吕郤夜焚公宫 秦穆公再平晋乱
  15. 大一新生调查报告——新生遇到的问题与需求
  16. 女生被渣,或许自己才是最大的黑手
  17. 账本App的制作教程
  18. FinalShell下载地址
  19. 求素数(质数)的方法
  20. ESP32 LOG库使用

热门文章

  1. Android 颜色Color(转)
  2. Win7 wifi热点设置( 转载)
  3. 22个HTML5 技巧二
  4. oracle收集统计计划,oracle收集统计信息之analyze
  5. java中小写转大写函数_lotus 中日期小写转大写的函数及算法(lotus script) (转)...
  6. char怎么比较_C语言的 main 函数到底怎么写才是对的?
  7. 欧歌赛机器人_本页面内容已永久停止用户浏览!
  8. 为什么使用HashMap需要重写hashcode和equals方法_java常见面试题敲黑板了,HashMap最全的整理,大厂必考...
  9. 反向工程_反向工程:宾利精心复刻了1929 Blower车型
  10. 安卓心理测试实训代码_我是如何从测试转到开发的