Comment faire une fonction générique en utilisant void * dans c?

J'ai un incr fonction d'incrémenter la valeur par 1
Je veux qu'il soit générique,parce que je ne veux pas faire de différentes fonctions pour la même fonctionnalité.

Supposons que je veux incrémenter int,float,char par 1

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

Mais le problème je sais, c'est Dereferencing a void pointer is undefined behaviour. Parfois, Il peut donner d'erreur :Invalid use of void expression.

Mon main d'une fonction est :

int main()
{

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

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

return 0;
}

Le problème est de savoir comment résoudre ce problème ? Est-il un moyen de le résoudre dans Cseulement

ou

vais-je avoir à définir incr() pour chacun des types de données ? si oui, alors quelle est l'utilité de void *

Même problème avec le swap() et sort() .Je veux échanger et de trier tous les types de types de données avec la même fonction.

source d'informationauteur Omkant