467
|
1 int printf(const char *format, ...);
|
|
2
|
79
|
3
|
94
|
4 int
|
|
5 a0(int i);
|
79
|
6
|
|
7 int (*conv)(int);
|
|
8
|
482
|
9 int
|
79
|
10 a0(int i)
|
|
11 {
|
|
12 return i+3;
|
|
13 }
|
|
14
|
482
|
15 int
|
79
|
16 a1(int i)
|
|
17 {
|
|
18 return i-3;
|
|
19 }
|
|
20
|
|
21
|
482
|
22 int
|
79
|
23 a2(int i,int conv(int))
|
|
24 {
|
|
25 return conv(i);
|
|
26 }
|
|
27
|
482
|
28 int
|
79
|
29 a3(int i,int (*conv)(int))
|
|
30 {
|
|
31 return conv(i);
|
|
32 }
|
|
33
|
482
|
34 int
|
79
|
35 a4(int i,int conv(int))
|
|
36 {
|
|
37 return (*conv)(i);
|
|
38 }
|
|
39
|
482
|
40 static
|
|
41 int a5(int i,int (*conv)(int))
|
79
|
42 {
|
|
43 return (*conv)(i);
|
|
44 }
|
|
45
|
482
|
46 typedef int (*fptr)(int,int (*)(int));
|
|
47
|
|
48 unsigned long addrs[]={
|
|
49 (unsigned long)&a0,
|
|
50 (unsigned long)&a5,
|
|
51 (unsigned long)a0,
|
|
52 (unsigned long)a5,
|
|
53 0,
|
|
54 };
|
|
55
|
|
56 fptr faddrs[]={
|
|
57 &a2,
|
|
58 &a5,
|
|
59 a2,
|
|
60 a5,
|
|
61 0,
|
|
62 };
|
|
63
|
|
64
|
688
|
65
|
|
66 void print( int i, void (*print)(int i,void (*)()) );
|
|
67
|
|
68 void print0( int i, void (*print1)(int i,void (*)()) )
|
|
69 {
|
|
70 printf("print0 %d %d\n",print1 == print,i);
|
|
71 }
|
|
72
|
|
73 void print( int i, void (*print)(int i,void (*)()) )
|
|
74 {
|
|
75 print0(i,print);
|
|
76 (*print)(i,print);
|
|
77 }
|
|
78
|
|
79 void pppp( void (*pppp)(void (*)()) );
|
|
80
|
|
81 void pppp0( void (*pppp1)(void (*)()) )
|
|
82 {
|
|
83 printf("pppp0 %d\n",pppp1 == pppp);
|
|
84 }
|
|
85
|
|
86 void pppp( void (*pppp)(void (*)()) )
|
|
87 {
|
|
88 pppp0(pppp);
|
|
89 (*pppp)(pppp);
|
|
90 }
|
|
91
|
483
|
92 int
|
79
|
93 main(int ac,char *av[]) {
|
|
94 int j,k;
|
|
95 conv = a0;
|
|
96 j = conv(3);
|
|
97 k = a2(4,a1);
|
491
|
98 printf("#0070:6 1 = %d %d\n",j,k);
|
79
|
99 k = a3(4,a1);
|
491
|
100 printf("#0072:6 1 = %d %d\n",j,k);
|
79
|
101 k = a4(4,a1);
|
491
|
102 printf("#0074:6 1 = %d %d\n",j,k);
|
79
|
103 k = a5(4,a1);
|
491
|
104 printf("#0076: 1 = %d %d\n",j,k);
|
|
105 printf("#0077: 1 = %d\n",(unsigned long)a0 == addrs[0]);
|
|
106 printf("#0078: 1 = %d\n",(unsigned long)a5 == addrs[1]);
|
|
107 printf("#0079: 1 = %d\n",(unsigned long)a0 == addrs[2]);
|
|
108 printf("#0080: 1 = %d\n",(unsigned long)a5 == addrs[3]);
|
482
|
109
|
491
|
110 printf("#0082: 1 = %d\n",a2 == faddrs[0]);
|
|
111 printf("#0083: 1 = %d\n",a5 == faddrs[1]);
|
|
112 printf("#0084: 1 = %d\n",&a2 == faddrs[2]);
|
|
113 printf("#0085: 1 = %d\n",&a5 == faddrs[3]);
|
688
|
114
|
|
115 print(55,print0);
|
|
116 pppp(pppp0);
|
|
117
|
172
|
118 return 0;
|
79
|
119 }
|