#include <stdio.h> #include <string.h> #include <setjmp.h> jmp_buf begin;
//VC提供了在调试窗口运行的语句,值得一试 void print(char *p) { printf("%s\n",p); return ; } int main() { char buff[20];//这里的buff并不能放在setjmp的下面,这是由于c语言所限制,这样的话,buff将会保存上一次的值;如果我们 交换顺序,并把文件改成cpp,虽然可以运行,但是第二次并不会重新定义buff,;;这个强大的jmp用在默认恢复到未出错之前的状态,又是c语言的一大特色 。这远远不同于goto. if(setjmp(begin)){ printf("jmp sucessed\n"); } gets(buff); if(strcmp(buff,"restart") == 0) { longjmp(begin,3); } return 0; }