view test/call.c @ 486:66d4b78f6219

*** empty log message ***
author kono
date Fri, 16 Dec 2005 13:00:01 +0900
parents 77cab9687d3f
children a379da780856
line wrap: on
line source

int printf(const char *format, ...);


int
a0(int i);

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);
}

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,
};


int
main(int ac,char *av[]) {
    int j,k;
    conv = a0;
    j = conv(3);
    k = a2(4,a1);
    printf("#0042:6 1 = %d %d\n",j,k);
    k = a3(4,a1);
    printf("#0044:6 1 = %d %d\n",j,k);
    k = a4(4,a1);
    printf("#0046:6 1 = %d %d\n",j,k);
    k = a5(4,a1);
    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;
}