2010-03-11 3 views
4

je le code suivantportabilité d'un code C

int main() 
{ 
    int a=6; 
    void *p; 
    p=&a; 
    p++; 
} 

Est-ce que par une valeur particulière le pointeur vide incrémenter ici (si elle tient l'adresse de tout type de données)?

Dans le cas ci-dessus, p s'incrémente de 1 même s'il pointe sur une valeur entière. Selon moi, le code ci-dessus appelle Implementation Defined comportement.

Répondre

7

Le code n'est pas valide du point de vue C standard. Il est illégal d'incrémenter les pointeurs void * ou tout autre pointeur sur les types incomplets.

Votre compilateur l'implémente comme une extension, qui est, bien sûr, non portable.

+0

Merci pour la réponse. :) –

5

L'application de l'opérateur ++ à void* est une extension de GCC qui, me semble-t-il, rend certaines choses un peu plus pratiques pour la programmation de très bas niveau (pas besoin de lancer beaucoup de cast, essentiellement). Je ne pense pas que j'ai jamais frappé une situation où je ne veux pas sérieusement lancer à unsigned char*.

Utilisez le drapeau -pedantic si vous écrivez du code supposé portable.

+0

+1 pour le drapeau pédant – Macmade

Questions connexes