setjmp和longjmp函数
来源:互联网 发布:java入门教程免费下载 编辑:程序博客网 时间:2024/05/18 13:43
#include <setjmp.h>
int setjmp(jmp_buf env );
返回值:若直接调用返回0,若从longjmp调用返回则返回非0值;
int longjmp(jmp_buf env , int val);
//jmp_buf是一个特殊类型,是某种特殊的数组,其中存放调用longjmp时能用来恢复桟的所有信息。
//env设为全局变量
setjmp和longjmp:执行跳转(处理发生深层嵌套函数调用中出错情况很有用)
与goto的区别:
goto:在一个函数内实施跳转。
setjmp和longjmp(非局部goto):在桟上跳过若干调用帧,返回到当前函数调用路径上。
要编写一个使用非局部挑战的可移植的程序时要使用volatile属性,才能使变量仍存放在寄存器中。但是将一个系统移植到另一个系统什么都可能改变。
#include"apue.h"
#include<serjmp.h>
#define TOK_ADD 5
jmp_buf jmpbuffer;
void do_line(char *);
void cmd_add(void);
void get_token(void);
int main(void)
{
char line[MAXLINE];
if(setjmp(jmpbuffer)!=0)
printf("error");
while(fgets(line,MAXLINE,stdin) != NULL)
do_line(line);
exit(0);
}
char *tok_ptr;
void do_line(char *ptr)
{
int cmd;
tok_ptr = ptr;
while((cmd = get_token()) > 0)
{
switch (cmd){
case TOK_ADD:
cmd_add();
break;
}
}
}
void cmd_add(void)
{
int token;
token = get_token();
if(token < 0)
longjmp(jmpbuffer,1);
}
int get_token(void)
{}
Unix环境高级编程第七章7.10学习总结
- setjmp和longjmp函数
- setjmp 和 longjmp 函数
- setjmp和longjmp函数
- setjmp和longjmp函数
- setjmp和longjmp函数
- setjmp和longjmp函数
- setjmp和longjmp函数
- setjmp和longjmp函数
- setjmp和longjmp函数
- 函数setjmp和longjmp
- setjmp函数和longjmp函数
- setjmp函数和longjmp函数
- linux setjmp和longjmp函数
- setjmp和longjmp函数使用方法
- setjmp和longjmp函数简介
- setjmp()和longjmp()函数详解
- linux的setjmp函数和longjmp函数
- setjmp和longjmp函数使用详解
- 信息检索开山
- 银行业务调度系统
- Linux用户空间与内核空间
- 我噶图和奥迪付款那份你
- SpringSide的Hibernate批量删除异常
- setjmp和longjmp函数
- 详细分析Java中断机制详细
- [Android]SQLite 常用方法
- Spring-cglib代理
- 5天学会jaxws-webservice编程第五天
- 最大公约数
- My97DatePicker之事件
- 简单的实现完全退出系统的通用方法---堆栈退出方法
- Hdu 3811 状态压缩 DP