IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Type void


Sujet :

C

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 101
    Par défaut Type void
    bonjour à tous,
    je m'adresse à vous pour en savoir plus sur le type void.
    A quoi sert-il?Dans quels cas l'utilise-t-on?
    Peut-on faire de l'arithmetique des pointeurs sur un type void* ?
    etc ...
    Merci d'avance
    Rod

  2. #2
    Membre Expert
    Avatar de zekey
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 036
    Par défaut
    Un type void sert à pouvoir pointer sur n'importe quelle partie de la mémoire sans avoir besoin de savoir le type de structure présente à cet endroit.
    En effet on peut faire de l'arithmétique sur des pointeur de type void*.
    Ce n'est cependant pas très fréquent pour des applications de gestions par exemple ou les données doivent être structurées. Mais par exemple si tu developpes quelque de proche de du système d'exploitation alors là ce deviendra nécessaire.

  3. #3
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par ze_key
    Un type void sert à pouvoir pointer sur n'importe quelle partie de la mémoire sans avoir besoin de savoir le type de structure présente à cet endroit.
    En effet on peut faire de l'arithmétique sur des pointeur de type void*.
    Non, pas de manière standard. C'est une extension de gcc, par exemple.
    Ce n'est cependant pas très fréquent pour des applications de gestions par exemple ou les données doivent être structurées. Mais par exemple si tu developpes quelque de proche de du système d'exploitation alors là ce deviendra nécessaire.
    Jamais fait de programmation générique ?

    Dans une liste chainée, par exemple, un pointeur de type void permet d'attacher n'importe quel type de donnée.

    Autre cas, dans un callback : pour récupérer le contexte de l'application.

  4. #4
    Membre Expert
    Avatar de zekey
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 036
    Par défaut
    Je n'ai pas compris, qu'est ce qui est une extension de gcc ?
    Le fait de pouvoir additionner des adresses ???
    Si c'est le cas comment faire pour programmer un offset ?

  5. #5
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par ze_key
    Je n'ai pas compris, qu'est ce qui est une extension de gcc ?
    Le fait de pouvoir additionner des adresses ???
    Oui c'est ca qu'il voulais dire je pense !
    Le type void ne peut être soumis à des calculs arithmétiques et d'ailleurs il ne peut pas non plus être déréférencé !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  6. #6
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par ze_key
    Je n'ai pas compris, qu'est ce qui est une extension de gcc ?
    L'arithmétique des pointeurs de type void.
    Le fait de pouvoir additionner des adresses ???
    On ne sait pas additionner des adresses en C.
    Si c'est le cas comment faire pour programmer un offset ?
    On sait calculer une adresse à partir d'une adresse de base et d'un indice si l'adresse est typée.

    Le langage C est défini par une norme. Celle ci dit que l'on ne peut pas faire d'arithmétique de pointeur avec un type void. Normal, on ne connait pas la taille de l'objet pointé).

    Certaines implémentations du langage C, comme la suite GCC et son compilateur gcc, offrent une caractéristique hors norme (ou extension aux spécifications du langage), qui assimile un void * à un char * et autorise donc l'arithmétique des pointeurs (détails dans la doc de gcc). Ce n'est évidemment pas portable et ce genre de pratique est donc déconseillée. (Surtout qu'il suffit d'utiliser un pointeur local du bon type pour faire ce qu'on a çà faire...)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. tableau dynamique de type void *
    Par Pirion dans le forum C
    Réponses: 7
    Dernier message: 18/11/2006, 12h34
  2. question sur le type "void *"
    Par ChriGoLioNaDor dans le forum C++
    Réponses: 4
    Dernier message: 10/02/2006, 11h27
  3. invalid static_cast from type `void
    Par barbarello dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 04/01/2006, 12h04
  4. Type void * ... petite question !
    Par Franck.H dans le forum C
    Réponses: 29
    Dernier message: 28/03/2005, 13h38
  5. type void* dans une structure
    Par barbapapaz dans le forum C
    Réponses: 3
    Dernier message: 16/07/2004, 16h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo