c语言中的“时光倒流”--非局部跳转longjmp
#include <setjmp.h>
jmp_buf a;
longjmp(a,1);//让程序的执行流回到当初setjmp返回的时刻,并且
返回由longjmp指定的返回值(longjmp第二个参数,这里是值1)
setjmp(a);
void JMP()
{
longjmp(b,1);
}
int function()
{
if(setjmp(a))
{
printf("aaa!");
}
else
{
printf("111 ");
JMP();
}
}
函数function的输出为"111 aaa!"
longjmp让程序“时光倒流”,回到了setjump返回的时刻,并改变其行为,从而改变了未来。