The short answer is that in C you cannot.
In C ++, you can overload myFunction() and provide several implementations.
In C, you can only have one myFunction() . Even if you could declare a function so that it could accept A , B or C (for example, as void* ), it would not be possible to find out which one it was supplied from.