1#include <setjmp.h>2#include <stdio.h>34/*5output:6test 17i = 1, v = 28test 29i = 2, v = 310end:11*/1213jmp_buf recover;1415void16test(char *s, int val)17{18 puts(s);19 longjmp(recover, val);20}2122int23main()24{25 static int i;26#ifdef __QBE__27 // We cannot implement proper volatile with qbe28 static volatile int v;29#else30 auto volatile int v;31#endif3233 i = 0;34 v = 1;35 if (!setjmp(recover)) {36 i = 1;37 v = 2;38 test("test 1", 1);39 }40 printf("i = %d, v = %d\n", i, v);4142 if (!setjmp(recover)) {43 i = 2;44 v = 3;45 test("test 2", 0);46 }47 printf("i = %d, v = %d\n", i, v);4849 return 0;50}