skyilyskyily.blog.chinaunix.net
skyily
全部博文(144)
2010年(16)
2009年(128)
Zane_Yu
tasteswe
zwrvvv
xiao888l
zimuqing
leilelei
Phyllis6
jonathan
denghai1
wbdwbd04
itTangze
lifj1234
18141908
AAABug
分类: LINUX
2010-01-12 17:43:03
setjmp和longjmp的函数原型在setjmp.h中。函数原型:int setjmp(jmp_buf envbuf);setjmp函数用缓冲区envbuf保存系统堆栈的内容,以便后续的longjmp函数使用。setjmp函数初次启用时返回0值。 void longjmp(jmp_buf envbuf, int val);longjmp函数中的参数envbuf是由setjmp函数所保存的堆栈环境,参数val设置setjmp函数的返回值。longjmp函数本身是没有返回值的,它执行后跳转到保存envbuf参数的setjmp函数调用,并由setjmp函数调用返回,此时setjmp函数的返回值就是val。 调用longjmp函数时不能使setjmp函数返回0,如果val为0,则setjmp函数返回1。longjmp函数从来不返回,因为它调用后就跳转到setjmp函数保存的堆栈处,恢复堆栈开始执行,所以longjmp函数不会返回。 setjmp和longjmp函数使用示例:#include <stdio.h>#include <setjmp.h> static jmp_buf buf; int main(){ int b; b = 3; if (setjmp(buf) != 0) { printf("b=%d\n", b); return 0; } b = 5; longjmp(buf, 1); return 0;}setjmp执行时返回0,执行b等于5,调用longjmp,跳转到setjmp调用,setjmp返回1,打印b=5。
上一篇:pthread_detach
下一篇:文件属性的意义
登录 注册