149
|
1 #define __environment _CbC_environment
|
|
2 #define __return _CbC_return
|
|
3
|
|
4 #include "stdio.h"
|
|
5 #include "stdlib.h"
|
|
6
|
|
7 struct F { int n; int r; int o; void *env;
|
|
8 __code (*next)( struct F );
|
|
9 __code (*exit)( struct F );
|
|
10 };
|
|
11
|
|
12 __code factorial(struct F arg)
|
|
13 {
|
|
14 if (arg.n<0) {
|
|
15 printf("#0008:err %d!\n",arg.n);
|
|
16 exit(1);
|
|
17 // goto (*exit1)(0,exit1env);
|
|
18 }
|
|
19 if (arg.n==0)
|
|
20 goto arg.next(arg);
|
|
21 else {
|
|
22 arg.r *= arg.n;
|
|
23 arg.n--;
|
|
24 goto factorial(arg);
|
|
25 }
|
|
26 }
|
|
27
|
|
28 __code print(struct F arg);
|
|
29
|
|
30 int main( int ac, char *av[])
|
|
31 {
|
|
32 struct F arg;
|
|
33 arg.n = atoi(av[1]);
|
|
34 // arg.n = 10;
|
|
35 arg.r = 1;
|
|
36 arg.o = 1;
|
|
37 arg.next = print;
|
|
38 arg.exit = 0;
|
|
39 arg.env = 0;
|
|
40 goto factorial(arg);
|
|
41 }
|
|
42
|
|
43 __code print(struct F arg)
|
|
44 {
|
|
45 printf("#0032:%d! = %d\n",arg.o, arg.r);
|
|
46 exit(0);
|
|
47 }
|
|
48
|