1. C语言异常检测实现基础知识
setJmp() , longjmp()
非局部跳转语句—setjmp和longjmp函数
非局部指的是,这不是由普通C语言goto,语句在一个函数内实施的跳转,而是在栈上跳过若干调用帧,返回到当前函数调用路径上的某一个函数中。
/* setjmp example: error handling */
#include <stdio.h>
#include <stdlib.h>
#include <setjmp.h>
/* jmp_buf 数据类型, setjmp, longjmp */
int main()
{
jmp_buf env;
int val;
val = setjmp (env);
if (val) {
fprintf (stderr,"Error %d happened",val);
exit (val);
}
longjmp (env,101); /* signaling an error */
return 0;
}
/*
这个程序利用setjmp 设置捕捉点,然后会被longjmp调用来通知这些错误
输出:
Error 101 happened
*/