Вы можете иметь указатели void, но вы должны привести их к указателю соответствующего типа, прежде чем сможете разыменовать их.
int someFunction(type_t type, void *ptr)
{
type_one_t *t1_ptr = NULL;
type_two_t *t2_ptr = NULL;
common_t *c_ptr = NULL;
if(type == TYPE_1){
t1_ptr = (type_one_t*)ptr;
c_ptr = t1_ptr->pcommon;
}
else if(type == TYPE_2){
t2_ptr = (type_two_t*)ptr;
c_ptr = t2_ptr->pcommon;
}
else{
return INVALID_VAL;
}
return c_ptr->someValue;
}
Глобальные переменные объявляются вне функции.
int a;
void func_1(int b)
{
int k = someVal();
a = k + b;
}
void func_2(int c)
{
a = a + c;
}
здесь a
является глобальным.