当前位置: 技术问答>linux和unix
setjmp函数,一个jmp_buf用两次会有什么情况? 谢谢
来源: 互联网 发布时间:2016-12-01
本文导语: jmp_buf jbuf; void er(void) { if( setjmp(jbuf)==1 ) { printf("er 1n"); } else { printf("er not 1n"); } if(getchar()!='a') longjmp(jbuf,2); else return; } int main...
jmp_buf jbuf;
void er(void)
{
if( setjmp(jbuf)==1 )
{
printf("er 1n");
}
else
{
printf("er not 1n");
}
if(getchar()!='a')
longjmp(jbuf,2);
else
return;
}
int main(int argc, char * argv[])
{
if( setjmp(jbuf)==2 )
{
printf("main 2n");
}
else
{
printf("main not 2n");
}
er();
longjmp(jbuf,2);
exit(0);
};
|
进入er()函数后,当getchar()=='a'时er()函数返回,此时进入main函数,但是由于er()函数中调用setjmp,所以就会用er()函数中的程序状态覆盖main函数的运行环境,此时如果输入不是'a'的字符可以正常打印,但是当输入getchar()=='a'的时候程序就会出问题
|
因为你er()中调用了setjmp,调用的时候就已经覆盖了