Bonjour
Quelle est la différence entre :
etCode:
1
2
3
4
5 Struct toto { int a; };
?Code:
1
2
3
4
5 Typedef Struct { int a; } toto;
Merci d'avance car je n'ai pas bien compris.
Version imprimable
Bonjour
Quelle est la différence entre :
etCode:
1
2
3
4
5 Struct toto { int a; };
?Code:
1
2
3
4
5 Typedef Struct { int a; } toto;
Merci d'avance car je n'ai pas bien compris.
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
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:
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:
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.
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:
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.Code:
1
2
3
4
5 typedef struct _s_toto { struct _s_toto * prev; struct _s_toto * next; }t_toto;
:P
J'ajoute encore que ces deux écritures sont équivalentes:
Code:
1
2
3
4
5 typedef struct _s_toto { struct _s_toto* prev; struct _s_toto* next; }t_toto;
Code:
1
2
3
4
5
6 struct _s_toto { struct _s_toto* prev; struct _s_toto* next; }; typedef struct _s_toto t_toto;