Puis-je faire de l'arithmétique sur des pointeurs void * en C?

est-ce valable

void *p = &X; /* some thing */
p += 12;

et si oui, quelles ne p point maintenant?
J'ai (troisième partie) du code qui fait cela (et compile proprement) et ma conjecture est que le void * a été traitée comme un char *. Mon fidèle K&R est silencieux(ish) sur le thème de

EDIT: Mon petit test app fonctionne très bien sur gcc 4.1.1 et traite void * char *. Mais g++ barfs

Je sais comment le faire correctement. J'ai besoin de savoir si je dois nettoyer la base de code pour trouver tous les lieux de son fait.

BTW gcc-pédant lance un avertissement

Résumé:

Le C spec est ambigu. Il indique qu'en termes de représentation et de les utiliser comme paramètres de la fonction void* =char*. Mais il est muet sur l'arithmétique des pointeurs.

  • gcc (4) les permis et il les traite comme
    char *
  • g++ refuse
  • gcc-pédant avertit à ce sujet
  • vs2010 à la fois le c et le c++
    refuse

source d'informationauteur pm100