ツムラ_メモ

大失敗を繰り返す。

非局所分岐

雑誌に非局所分岐に関する記事があったので、少し実験してみる。

#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