非局所分岐
雑誌に非局所分岐に関する記事があったので、少し実験してみる。
#include<stdio.h> #include<malloc.h> #include<setjmp.h> jmp_buf jbuf; void f1(){ static int f1i=0; f1i++; puts("f1"); if(f1i>4){ longjmp(jbuf,1); } else{ puts("return f1"); return; } } void f2(){ static int f2i=0; puts("f2"); f2i++; if(f2i<3){ puts("return f2"); return; } else{ longjmp(jbuf,2); } } int main(){ int n=setjmp(jbuf); while(n==0){ f1(); f2(); } switch(n){ case 1: puts("stop f1"); break; case 2: puts("stop f2"); break; } return 0; }
実行結果
$ ./SetJumpTest.exe
f1
return f1
f2
return f2
f1
return f1
f2
return f2
f1
return f1
f2
stop f2