Mercurial > hg > CbC > old > device
diff test/call.c @ 482:8370ba6e8557
*** empty log message ***
author | kono |
---|---|
date | Sun, 11 Dec 2005 23:23:18 +0900 |
parents | 32737bad7489 |
children | 77cab9687d3f |
line wrap: on
line diff
--- a/test/call.c Sun Dec 04 14:19:25 2005 +0900 +++ b/test/call.c Sun Dec 11 23:23:18 2005 +0900 @@ -6,37 +6,63 @@ int (*conv)(int); +int a0(int i) { return i+3; } +int a1(int i) { return i-3; } +int a2(int i,int conv(int)) { return conv(i); } +int a3(int i,int (*conv)(int)) { return conv(i); } +int a4(int i,int conv(int)) { return (*conv)(i); } -a5(int i,int (*conv)(int)) +static +int a5(int i,int (*conv)(int)) { return (*conv)(i); } +typedef int (*fptr)(int,int (*)(int)); + +unsigned long addrs[]={ + (unsigned long)&a0, + (unsigned long)&a5, + (unsigned long)a0, + (unsigned long)a5, + 0, +}; + +fptr faddrs[]={ + &a2, + &a5, + a2, + a5, + 0, +}; + + + main(int ac,char *av[]) { int j,k; conv = a0; @@ -48,6 +74,15 @@ k = a4(4,a1); printf("#0046:6 1 = %d %d\n",j,k); k = a5(4,a1); - printf("#0048:6 1 = %d %d\n",j,k); + printf("#0048: 1 = %d %d\n",j,k); + printf("#0049: 1 = %d\n",(unsigned long)a0 == addrs[0]); + printf("#0050: 1 = %d\n",(unsigned long)a5 == addrs[1]); + printf("#0051: 1 = %d\n",(unsigned long)a0 == addrs[2]); + printf("#0052: 1 = %d\n",(unsigned long)a5 == addrs[3]); + + printf("#0053: 1 = %d\n",a2 == faddrs[0]); + printf("#0054: 1 = %d\n",a5 == faddrs[1]); + printf("#0055: 1 = %d\n",&a2 == faddrs[2]); + printf("#0056: 1 = %d\n",&a5 == faddrs[3]); return 0; }