当前位置: 技术问答>linux和unix
关于错误跳转的问题
来源: 互联网 发布时间:2015-06-03
本文导语: 在处理错误的时候遇到了一个跳转的问题: void dealerror(char * errorinfo) { .... } void main() { ... function1(); function2(); ... } 在function1 和 function2 中 我都有调用dealerror函数对错误的进行判断处理 不...
在处理错误的时候遇到了一个跳转的问题:
void dealerror(char * errorinfo)
{
....
}
void main()
{
...
function1();
function2();
...
}
在function1 和 function2 中 我都有调用dealerror函数对错误的进行判断处理 不过我不知道 那个dealerror应该怎跳转才能使function1 出错时显示了错误信息后继续执行 function2, function2 出错时继续执行下面的代码. 原来我是用exit(0)的不过发现一dealerror 后就跳出了. dealerror函数应该怎么写才能进行合理的跳转呢? 谢谢各位大侠了...
void dealerror(char * errorinfo)
{
....
}
void main()
{
...
function1();
function2();
...
}
在function1 和 function2 中 我都有调用dealerror函数对错误的进行判断处理 不过我不知道 那个dealerror应该怎跳转才能使function1 出错时显示了错误信息后继续执行 function2, function2 出错时继续执行下面的代码. 原来我是用exit(0)的不过发现一dealerror 后就跳出了. dealerror函数应该怎么写才能进行合理的跳转呢? 谢谢各位大侠了...
|
use "break"
replace "void dealerror()" to "int dealerror()"
define various error code bye various return code of dealerror()
u can judge the return code of dealerror() to use "break" or "return" in a while routine
replace "void dealerror()" to "int dealerror()"
define various error code bye various return code of dealerror()
u can judge the return code of dealerror() to use "break" or "return" in a while routine
|
虽然使用setjmp有一些晦涩之处,但是纯错误处理的话,应该可以应用。注意当涉及到信号处理时,你需要想想先了。
jmp_buf jmpbuf;
void dealerror(char * errorinfo)
{
....
longjmp(&jmpbuf, 1);
}
void main()
{
...
//如果function1中出错,那么longjmp会返回到if这个地方,但是由于返回值是1,所以跳过function1,而继续往下
if(setjmp(&jmpbuf) == 0)
function1();
if(setjmp(&jmpbuf) == 0)
function2();
...
}
不知道这是不是你想要的,呵呵
jmp_buf jmpbuf;
void dealerror(char * errorinfo)
{
....
longjmp(&jmpbuf, 1);
}
void main()
{
...
//如果function1中出错,那么longjmp会返回到if这个地方,但是由于返回值是1,所以跳过function1,而继续往下
if(setjmp(&jmpbuf) == 0)
function1();
if(setjmp(&jmpbuf) == 0)
function2();
...
}
不知道这是不是你想要的,呵呵
|
就像icedust(冰封尘想)那样,用return -yourself errorno.在调用时处理返回值就行了。
或者你如果有需要可以使用setjmp.h,like this
#include
static jmp_buf env_buf;
…………
if (setjmp(env_buf)==0)
{
function()
…………
}
…………
dealerror()中用longjmp(env_buf,1)跳回去。(慎用)
或者你如果有需要可以使用setjmp.h,like this
#include
static jmp_buf env_buf;
…………
if (setjmp(env_buf)==0)
{
function()
…………
}
…………
dealerror()中用longjmp(env_buf,1)跳回去。(慎用)
|
?? 可能不太了解楼主的意思,不过只是要跳出的话 你在f1和f2里发现出错就立刻
return dealerror();不就可以了?
return dealerror();不就可以了?
|
exit(0);
>>
return;
>>
return;
|
奇怪的问题。。。
用break、continue、return、goto等等等等都可以做跳转。
涉及信号时用的时sigsetjmp、siglongjmp。
用break、continue、return、goto等等等等都可以做跳转。
涉及信号时用的时sigsetjmp、siglongjmp。