Chinaunix首页 | 论坛 | 博客
  • 博客访问: 84745
  • 博文数量: 7
  • 博客积分: 1498
  • 博客等级: 上尉
  • 技术积分: 80
  • 用 户 组: 普通用户
  • 注册时间: 2007-05-01 17:47
文章分类

全部博文(7)

文章存档

2016年(3)

2009年(1)

2007年(3)

我的朋友

分类:

2007-09-26 11:16:18

#include
int setjmp(jmp_buf envbuf)
宏函数setjmp()在缓冲区envbuf中保存系统堆栈里的内容,供longjmp()以后使用,setjmp()必须使用头文件setjmp.h。
调用setjmp()宏时,返回值为0,然而longjmp()把一个变原传递给setjmp(),该值(恒不为0)就是调用longjmp()后出现的setjmp()的值void longjmp(jmp_buf envbuf,int status);
     函数longjmp()使程序在最近一次调用setjmp()处重新执行。setjmp()和longjmp()提供了一种在函数间调转的手段,必须使用头部文件setjmp.h。
     函数longjmp()通过把堆栈复位成envbuf中描述的状态进行操作,envbuf的设置是由预先调用setjmp()生成的。这样使程序的执行在 setjmp()调用后的下一个语句从新开始,使计算机认为从未离开调用setjmp()的函数。从效果上看,longjmp()函数似乎“绕”过了时间 和空间(内存)回到程序的原点,不必执行正常的函数返回过程。
     缓冲区envbuf具有中定义的buf_jmp类型,它必须调用longjmp()前通过调用setjmp()来设置好。
    值status变成setjmp()的返回值,由此确定长调转的来处。不允许的唯一值是0,0是程序直接调用函数setjmp()时由该函数返回的,不是间接通过执行函数longjmp()返回的。
     longjmp()函数最常用于在一个错误发生时,从一组深层嵌套的实用程序中返回。
 例子
这个例子输出“1   2   3“

#include
#include
jmp_buf ebuf;
void f2(void);
int main(void)
{
    int i;
    printf("1");
    i=setjmp(ebuf);
    if(i==0)
    {
        f2();
        printf("This will not be printed.");
    }
    printf("%d",i);
    return 0;
}
void f2(void)
{
    printf("2");
    longjmp(ebuf,3);
}
 
阅读(916) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~