annotate sources/setjmp.c @ 7:8ef81ff8cb52

emended.
author kent <kent@cr.ie.u-ryukyu.ac.jp>
date Fri, 12 Feb 2010 13:10:57 +0900
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
7
8ef81ff8cb52 emended.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 /*
8ef81ff8cb52 emended.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2 #include<stdio.h>
8ef81ff8cb52 emended.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 #include<setjmp.h>
8ef81ff8cb52 emended.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
4
8ef81ff8cb52 emended.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 void jmpfunc(jmp_buf env);
8ef81ff8cb52 emended.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 int setfunc();
8ef81ff8cb52 emended.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 int flag=0;
8ef81ff8cb52 emended.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
8
8ef81ff8cb52 emended.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
9 int
8ef81ff8cb52 emended.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 main(int argc, char **argv)
8ef81ff8cb52 emended.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
11 {
8ef81ff8cb52 emended.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
12 int rtn;
8ef81ff8cb52 emended.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
13 flag=1;
8ef81ff8cb52 emended.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
14 rtn = setfunc();
8ef81ff8cb52 emended.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
15 printf("rtn = %d\n", rtn);
8ef81ff8cb52 emended.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
16 return 0;
8ef81ff8cb52 emended.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
17 }
8ef81ff8cb52 emended.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
18
8ef81ff8cb52 emended.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
19 */
8ef81ff8cb52 emended.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
20 int
8ef81ff8cb52 emended.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
21 setfunc()
8ef81ff8cb52 emended.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
22 {
8ef81ff8cb52 emended.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
23 int a;
8ef81ff8cb52 emended.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
24 jmp_buf env;
8ef81ff8cb52 emended.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
25
8ef81ff8cb52 emended.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
26 if (a=setjmp(env)) {
8ef81ff8cb52 emended.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
27 printf("it's continued! with value %d", a);
8ef81ff8cb52 emended.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
28 return a;
8ef81ff8cb52 emended.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
29 }
8ef81ff8cb52 emended.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
30
8ef81ff8cb52 emended.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
31 jmpfunc(env);
8ef81ff8cb52 emended.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
32 return 0;
8ef81ff8cb52 emended.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
33 }
8ef81ff8cb52 emended.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
34
8ef81ff8cb52 emended.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
35 void
8ef81ff8cb52 emended.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
36 jmpfunc(jmp_buf env)
8ef81ff8cb52 emended.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
37 {
8ef81ff8cb52 emended.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
38 if (flag) {
8ef81ff8cb52 emended.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
39 longjmp(env, 2);
8ef81ff8cb52 emended.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
40 }
8ef81ff8cb52 emended.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
41 return;
8ef81ff8cb52 emended.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
42 }