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 :

Définition de type opaque


Sujet :

C

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 217
    Par défaut Définition de type opaque
    Bonjour à tous.
    J'aimerais avoir la confirmation que je ne fais pas de grosse boulette quand j'écris :

    Code truc.h : Sélectionner tout - Visualiser dans une fenêtre à part
    extern struct __struct;
    Code truc.c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    include "truc.h"
    struct __struct {float a};

    Mon but bien sûr est de définir le type __struct pour tous les fichiers qui incluent "truc.h" mais de n'en dévoiler l'implementation qu'au fichier "truc.c". J'ai vu quelque par que l'on peut utiliser le mot-clef typedef. Mais cette solution est plus simple, non (à la compilation pas d'erreur, mais j'ai pas essayé le link)?

  2. #2
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    217
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 217
    Par défaut
    Excellent!

    Donc en gros les mots-clef extern ne servent à rien.

  4. #4
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut
    Pas dans ce cas là!
    le mot qui t'intéresse toi c'est typedef.
    Cordialement.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    217
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 217
    Par défaut
    Pourquoi typedef? Je ne veux pas définir un type, je veux juste déclarer ma structure dans le header file et la définir dans le fichier .c .

  6. #6
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut
    si tu fais ça, tu n'auras pas un type opaque!

  7. #7
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    d'autre part il me semble que les "underscore" ou "souligné" en tête sont réservés pour la blibliothèque stanbdard..

    pourquoi simplement ne pas définit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef pmastruct { ... } mastruct ;

  8. #8
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 69
    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 _Michel Voir le message
    J'aimerais avoir la confirmation que je ne fais pas de grosse boulette quand j'écris :
    Code truc.h : Sélectionner tout - Visualiser dans une fenêtre à part
    extern struct __struct;
    Bah si...

    http://delahaye.emmanuel.free.fr/spip.php?article10
    http://emmanuel-delahaye.developpez....htm#id_reserve

  9. #9
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 69
    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 nicolas.sitbon Voir le message
    si tu fais ça, tu n'auras pas un type opaque!
    Bah si. typedef n'est pas obligatoire. C'est juste une facilité syntaxique...

  10. #10
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut
    Citation Envoyé par Emmanuel Delahaye Voir le message
    Bah si. typedef n'est pas obligatoire. C'est juste une facilité syntaxique...
    Autant pour moi, je n'avais jamais essayer de faire un type incomplet sans typedef.

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    217
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 217
    Par défaut
    Donc ceci est tout à fait correct :
    Code truc.h : Sélectionner tout - Visualiser dans une fenêtre à part
    struct STRUCTURE;
    Code truc.c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    include "truc.h"
    struct STRUCTURE{float a};

    Mais un puriste préfererait :
    Code truc.h : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef struct STRUCTURE MA_STRUCTURE;
    Code truc.c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    include "truc.h"
    struct STRUCTURE{float a};
    pour pouvoir utiliser la structure MA_SRUCTURE sans rajouter struct devant.

  12. #12
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut
    C'est bien ça, parcontre, on n'utilise pas typedef pour éviter le mot "struct" mais pour mieux encapsuler la variable, on cache le type réel de celle ci même si bien souvent c'est une structure, en revanche il est une mauvaise pratique que de cacher un pointeur avec un typedef exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef struct ma_struct * ma_struct
    auquel l'on préferera
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef struct ma_struct ma_struct

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    217
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 217
    Par défaut
    Merci, mais personne ne pourrait rendre disponible un cours exhaustif sur l'utilisation des structures?
    Souvent, j'ai eu des problèmes avec ça, parce que ce n'est pas intuitif et c'est détaché de la syntaxe classique du C. En plus, il y a des différences entre compilateurs : bcc55 renvoie des erreurs sur des morceaux de codes qui passent très bien sur d'autres compilateurs. Ca mène à penser que c'est un beau fouili et que personne ne sait vraiment comment il faut faire.

  14. #14
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut
    Pour moi c'est très clair, y a pas à se prendre la tête, tu peux toujours te pencher sur la norme si tu as le moindre doute. Des bons tutos sur les structures et les types opaques : j'en connais un, le bouqin de Achille Braquelaire, c'est le meilleur que j'ai trouvé sur ce sujet.

  15. #15
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par _Michel Voir le message
    Mais un puriste préfererait :
    pour pouvoir utiliser la structure MA_SRUCTURE sans rajouter struct devant.
    c'est pas être puriste..

    Tu définis un nouveau type (typedef à ton avis ça veut dire quoi )

    Donc, comme tu déclares :

    tu pourras définir


  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    217
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 217
    Par défaut
    Voui c'est a peut près ce que je voulais dire : un "puriste" préfère créer un nouveau type plutot que de laisser apparaitre que son truc est une structure.

  17. #17
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut
    Citation Envoyé par _Michel Voir le message
    Voui c'est a peut près ce que je voulais dire : un "puriste" préfère créer un nouveau type plutot que de laisser apparaitre que son truc est une structure.
    Mais rien ne t'y oblige!

  18. #18
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 69
    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 _Michel Voir le message
    Donc ceci est tout à fait correct :
    Code truc.h : Sélectionner tout - Visualiser dans une fenêtre à part
    struct STRUCTURE;
    Code truc.c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    include "truc.h"
    struct STRUCTURE{float a};

    Mais un puriste préfererait :
    Code truc.h : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef struct STRUCTURE MA_STRUCTURE;
    Code truc.c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    include "truc.h"
    struct STRUCTURE{float a};
    pour pouvoir utiliser la structure MA_SRUCTURE sans rajouter struct devant.
    Pas un 'puriste', mais plutôt un fainéant de mon espèce...

  19. #19
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    et d'ailleurs j'avais même pas vu mais ceci

    Citation Envoyé par _Michel Voir le message
    Code truc.c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    include "truc.h"
    struct STRUCTURE{float a};
    est faux

    ce serait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    include "truc.h"
    STRUCTURE mastruct;
    et comme dit Emmanuel, c'est autant par simplicité de lecture et manipulation (et "pensée Objet") que par fainéantise.

    Pourquoi avoir à se retaper 200000 fois "struct" pour rien ?

  20. #20
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    217
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 217
    Par défaut
    C'est là qu'on reconnait les épicuriens et les stoïciens...

    mais ceci [...] est faux
    Pourquoi??? Je ne veux pas utiliser ma structure, je veux le définir.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Type opaque en C
    Par Novocaine dans le forum C
    Réponses: 14
    Dernier message: 03/06/2007, 22h37
  2. Problème pour une définition de type
    Par Kleer dans le forum Ada
    Réponses: 4
    Dernier message: 05/03/2007, 13h34
  3. Réponses: 2
    Dernier message: 27/06/2006, 16h21
  4. types opaques
    Par champijulie dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 13/06/2005, 10h53
  5. Type opaque
    Par Gogoye dans le forum C
    Réponses: 4
    Dernier message: 05/11/2003, 14h46

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