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 :

Je n'ai pas bien compris les structures


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Je n'ai pas bien compris les structures
    Bonjour

    Quelle est la différence entre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Struct toto
    {
        int a;
    };
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Typedef Struct 
    {
        int a;
    } toto;
    ?

    Merci d'avance car je n'ai pas bien compris.
    Dernière modification par Bktero ; 07/07/2013 à 18h38. Motif: Orthographe + indentation

  2. #2
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Attention à la casse : il faut écrire struct et typedef sans majuscule !

    Dans le premier cas, il faudra écrire le mot-clé struct à chaque déclaration de variable de ce type ; dans le second, on a un synonyme de type donc le mot-clé ne doit plus être utilisé.

    Voir la FAQ :
    http://c.developpez.com/faq/?page=ty...#TYPES_typedef
    http://c.developpez.com/faq/?page=st...STRUCT_typedef

  3. #3
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 832
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par zoltars43 Voir le message
    Bonjour

    Quelle est la différence entre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    struct toto {
        int a;
    };
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    typedef struct {
        int a;
    } toto;
    ?

    Merci d'avance car je n'ai pas bien compris.
    Bonjour
    Dans le premier cas, tu déclares une structure qui se nomme toto. Si tu as ensuite besoin de définir une variable "var" contenant cette structure, tu devras écrire struct toto var;.
    Généralement, il est conseillé de nommer les structures "s_xxx"
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    struct s_toto {
        int a;
    }
    struct s_toto var;

    Dans le second cas, tu définis un nouveau type basé sur quelque chose d'existant (ici une structure sans nom mais qui pourrait tout aussi bien en avoir un). Ce type devient un type à part entière, comme un char ou un int. A partir de là, tu peux donc créer une variable de ce type en tapant toto var;.
    Généralement, il est conseillé de nommer les types persos "t_xxx"
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    typedef struct {
        int a;
    } t_toto;
    t_toto var;

    Le second cas est plus pratique car il évite d'avoir à écrire "struct" à chaque fois mais n'est pas plus efficace ou plus rapide que le premier.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  4. #4
    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 Merci Medinoc, pour l'oublie des étoiles des pointeurs !
    Je rajoute une couche. Dans certains cas, même avec un typedef, il te faut pour par exemple une liste chaînée, faire ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    typedef struct _s_toto
    {
       struct _s_toto * prev;
       struct _s_toto * next;
    }t_toto;
    Saisie bien la nuance où ici j'utilise déjà un nom de structure après le typedef struct car ici il faut que tu utilises déjà le nom de structure pour en créer des lien vers elle-même.

    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 !

  5. #5
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    J'ajoute encore que ces deux écritures sont équivalentes:
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    typedef struct _s_toto
    {
       struct _s_toto* prev;
       struct _s_toto* next;
    }t_toto;
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    struct _s_toto
    {
       struct _s_toto* prev;
       struct _s_toto* next;
    };
    typedef struct _s_toto t_toto;
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. [9.2] J'ai pas bien compris la doc triggers
    Par frp31 dans le forum Débuter
    Réponses: 3
    Dernier message: 08/08/2014, 09h22
  2. FreePascal, Lazarus, pas bien compris..
    Par Just-Soft dans le forum Langage
    Réponses: 3
    Dernier message: 28/02/2009, 16h24
  3. Ai-je bien compris les possibilités de C#?
    Par berceker united dans le forum Windows Forms
    Réponses: 6
    Dernier message: 29/08/2006, 10h15
  4. Réponses: 7
    Dernier message: 14/08/2006, 09h18
  5. [THREAD][DAEMON]Pas bien compris....
    Par XristofGreek dans le forum Concurrence et multi-thread
    Réponses: 2
    Dernier message: 24/09/2004, 13h28

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