struct s {long a; int b;}; | |
int foo(int x, void *y) | |
{ | |
switch(x) { | |
case 0: return ((struct s*)y)->a; | |
case 1: return *(signed char*)y; | |
case 2: return *(short*)y; | |
} | |
abort(); | |
} | |
int main () | |
{ | |
struct s s; | |
short sh[10]; | |
signed char c[10]; | |
int i; | |
s.a = 1; | |
s.b = 2; | |
for (i = 0; i < 10; i++) { | |
sh[i] = i; | |
c[i] = i; | |
} | |
if (foo(0, &s) != 1) abort(); | |
if (foo(1, c+3) != 3) abort(); | |
if (foo(2, sh+3) != 3) abort(); | |
exit(0); | |
} |