Вы можете объявить свою функцию следующим образом:
void myapi(void *param, enum type param_type);
И соответствующее перечисление:
enum type {
TYPE_INT,
TYPE_CHAR,
// more types
};
С таким телом:
void myapi(void *param, enum type param_type)
{
if (param_type == TYPE_INT) {
int *intptr = param;
// do something with intptr
} else if (param_type == TYPE_CHAR) {
char *charptr = param;
// do something with charptr
// cases for other types
}
}
И Вы бы назвали это так:
int myint = 0;
myapi(&myint, TYPE_INT);
char mychar = 'x';
myapi(&mychar, TYPE_CHAR);