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 :

Typedef et structures


Sujet :

C

  1. #1
    Membre habitué
    Inscrit en
    Janvier 2005
    Messages
    491
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 491
    Points : 172
    Points
    172
    Par défaut Typedef et structures
    Bonjour,
    J'aimerai savoir la différence entre ces trois déclarations:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    typedef struct {
      int x, y;
    } point;
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    typedef struct point {
      int x, y;
    } point;
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    typedef struct point {
      int x, y;
    };
    De plus, lorsque je déclare de cette manière:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    typedef struct point{
      int x, y;
    } p ;
    et que je manipule des pointeurs sur cette structure (ex: création d'un deuxième pointeur qui pionte sur cette même structure) , j'ai toujours un warning: invalid pointer type etc...

  2. #2
    Membre éprouvé
    Profil pro
    Eleveur de cornichons
    Inscrit en
    Juin 2002
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Eleveur de cornichons
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 074
    Points : 1 166
    Points
    1 166
    Par défaut
    typedef permet de définir un nouveau type personnel.
    Donc avec la première écriture, "point" est un type (la structure).
    Avec la deuxième écriture, c'est la même chose mais tu peux, en plus, utiliser l'écriture "struct point x" (équivalente à "point x").

    Attention, au cas où, dans ton exemple, "p" n'est pas une structure mais un type. Il faut donc faire un truc comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    p truc ; // structure 
    p *ptruc ; // pointeur sur structure
     
    ptruc = &truc ; // pointe
    ptruc->x = 5 ; // accès au champ x
    Nas'

  3. #3
    Membre habitué
    Inscrit en
    Janvier 2005
    Messages
    491
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 491
    Points : 172
    Points
    172
    Par défaut
    et pour la troisième écriture? si j'ai bien compris, dans ma troisième écriture je ne déclare pas de nouveau type?

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut Re: Typedef et structures
    Citation Envoyé par vinzzzz
    Bonjour,
    J'aimerai savoir la différence entre ces trois déclarations:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    typedef struct {
      int x, y;
    } point;
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    typedef struct point {
      int x, y;
    } point;
    Il y a un tag en plus. Ca faclite la création de structures récursives comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    struct tag
    {
       struct tag *p_next;
    };
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    typedef struct point {
      int x, y;
    };
    Pas du C standard.
    De plus, lorsque je déclare de cette manière:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    typedef struct point{
      int x, y;
    } p ;
    et que je manipule des pointeurs sur cette structure (ex: création d'un deuxième pointeur qui pionte sur cette même structure) , j'ai toujours un warning: invalid pointer type etc...
    Montre le code exact.
    Pas de Wi-Fi à la maison : CPL

  5. #5
    Membre habitué
    Inscrit en
    Janvier 2005
    Messages
    491
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 491
    Points : 172
    Points
    172
    Par défaut
    C'est bon le warning a disparu...
    La déclaration :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    typedef struct point {
            int x,y ;
    } ;
    est non standart donc, et pourtant je l'ai retourvé dans pas mal de cours de C sur internet...

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par vinzzzz
    C'est bon le warning a disparu...
    La déclaration :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    typedef struct point {
            int x,y ;
    } ;
    est non standart donc,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Compiling: main.c
    main.c:8: warning: useless keyword or type name in empty declaration
    Linking console executable: C:\dev\forums\OP\01.exe
    Process terminated with status 0 (0 minutes, 1 seconds)
    0 errors, 1 warnings
    et pourtant je l'ai retourvé dans pas mal de cours de C sur internet...
    Donne des liens.
    Pas de Wi-Fi à la maison : CPL

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

Discussions similaires

  1. typedef structure de données
    Par mdh12 dans le forum Débuter
    Réponses: 1
    Dernier message: 02/12/2009, 17h20
  2. probleme avec les typedef structure
    Par claire_cartier dans le forum Débuter
    Réponses: 7
    Dernier message: 21/11/2008, 09h38
  3. recuperation de la structure d'une base
    Par pascalT dans le forum 4D
    Réponses: 7
    Dernier message: 07/06/2006, 15h32
  4. Sortir un typedef d'une classe
    Par Theophil dans le forum C++Builder
    Réponses: 13
    Dernier message: 03/07/2002, 17h21
  5. longueur d'une structure
    Par bohemianvirtual dans le forum C
    Réponses: 6
    Dernier message: 28/05/2002, 18h31

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