Como fazer função genérica usando void * in c?

eu tenho umincr função para incrementar o valor por1 Eu quero torná-lo genérico, porque eu não quero fazer funções diferentes para a mesma funcionalidade.

Suponha que eu queira incrementarint,float,char por1

void incr(void *vp)
{
        (*vp)++;
}

Mas o problema que eu conheço éDereferencing a void pointer is undefined behaviour. Às vezes pode dar erro:Invalid use of void expression.

Minhasmain funciton é:

int main()
{

int i=5;
float f=5.6f;
char c='a';

incr(&i);
incr(&f);
incr(&c);

return 0;
}

O problema é como resolver isso? Existe uma maneira de resolvê-lo emC

ou

vou ter que definirincr() para cada tipo de dados? se sim, então qual é o uso devoid *

O mesmo problema com oswap() esort() Eu quero trocar e classificar todos os tipos de dados com a mesma função.

questionAnswers(7)

yourAnswerToTheQuestion