1 struct s {long a; int b;}; 2 3 int foo(int x, void *y) 4 { 5 switch(x) { 6 case 0: return ((struct s*)y)->a; 7 case 1: return *(signed char*)y; 8 case 2: return *(short*)y; 9 } 10 abort(); 11 } 12 13 int main () 14 { 15 struct s s; 16 short sh[10]; 17 signed char c[10]; 18 int i; 19 20 s.a = 1; 21 s.b = 2; 22 for (i = 0; i < 10; i++) { 23 sh[i] = i; 24 c[i] = i; 25 } 26 27 if (foo(0, &s) != 1) abort(); 28 if (foo(1, c+3) != 3) abort(); 29 if (foo(2, sh+3) != 3) abort(); 30 exit(0); 31 } 32