Chinaunix首页 | 论坛 | 博客
  • 博客访问: 536390
  • 博文数量: 142
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1452
  • 用 户 组: 普通用户
  • 注册时间: 2013-09-12 16:28
文章分类

全部博文(142)

文章存档

2016年(10)

2015年(60)

2014年(72)

我的朋友

分类: C/C++

2014-08-27 16:22:07

函数原型:
    #include
    void longjmp(jmp_buf env, int val); 
    int setjmp(jmp_buf env);--------返回值:若直接调用则返回0,若从longjmp调用返回则返回非0值。

在C语言中,goto语句是不能跨越函数的。为了实现跨函数的跳转,引入了setjmp和longjmp。
用法解释如下:先调用setjmp,用变量env记录当前的位置,然后调用longjmp,返回env所记录的栈顶指针,并使setjmp的返回值为val。当时用longjmp时,env的内容被销毁了。

举例如下:
setjmp.c

点击(此处)折叠或打开

  1. #include <setjmp.h>
  2. #include <unistd.h>
  3. #include <stdio.h>
  4. jmp_buf env;

  5. void bb()
  6. {
  7.     printf("before longjmp\n");
  8.     longjmp(env,1);
  9.     printf("after longjmp\n");
  10. }

  11. int main()
  12. {
  13.     if(setjmp(env) == 0) {
  14.         printf("first entering\n");
  15.         bb();
  16.     }else{
  17.         printf("back to main\n");
  18.     }
  19.     return 0;
  20. }
编译: gcc -g setjmp.c -o a
运行: ./a
first entering
before longjmp
back to main


阅读(611) | 评论(0) | 转发(0) |
0

上一篇:alarm/pause/sleep函数

下一篇:cvs check in 目录

给主人留下些什么吧!~~