Quelle est la différence entre ces deux déclarations et est une préférence sur l'autre?
5 Réponses :
Le premier vous permet d'utiliser l'importation à l'intérieur de la structure pour faire référence à des objets du même type. utile dans des cas tels que des listes liées dans lesquelles un nœud doit faire référence à un nœud. p>
Le premier exemple vous permet d'utiliser l'objet à l'intérieur lui-même pour des listes et des arbres liés (comme Victor souligne ). La seconde est un exemple de types anonymes que l'expérience a enseignée ne se comporte pas bien avec tous les compilateurs. La première approche est donc probablement recommandée. Si vous n'êtes pas préoccupé par la structure de pouvoir se référencer, vous pouvez toujours lui donner un nom peu probable de conflit comme __Someprefix_ioport__ par exemple. P>
Les identificateurs qui commencent par double-soussercore ou soussecore + lettre de majuscule sont réservés, vous ne devriez donc pas les utiliser. Ils pourraient entrer en conflit avec un identifiant dans les bibliothèques compilatrice ou standard. Voir Stackoverflow.com/a/1449301
Autant que le style est préféré, je préfère le 1er style (avec le nom dans la balise Système et en tant que TypeDEF pour la structure) simplement car il n'y a pas d'inconvénient d'autres caractères dans le fichier source. L'extrait de struct de mon IDE laisse tomber le nom dans les deux endroits, donc je reçois toujours un nom de structure Typef'ed, avec un nom d'étiquette de struct. P>
Vous obtenez quelques petits avantages: p>
structure structure code>" peut être utilisé pour déclarer des pointeurs à la structure dans la structure li>
- Vous pouvez vous éloigner simplement en utilisant StructName dans CO ou C ++ Code LI>
- Vous empêchez un potentiel (même si très rare en pratique) Ovinledity en C ++ a à voir avec le nom de la structure utilisé pour un autre objet sans erreur ni avertissement li>
ul>
Mais, si je passe manuellement dans la définition de la structure, je négligerai souvent la négligence paresseuse déclarant un ou l'autre nom. P>
c compte quatre espaces de noms différents, où l'espace de noms de la structure est l'un d'entre eux. Par conséquent:
typedef struct foo { int bar; } baz;
Pour des raisons de lisibilité, il est préférable d'exprimer l'exemple original sous une forme telle que: .... qui met l'accent sur la différence entre le type et l'instance. P> < P> En outre, si vous souhaitez ajouter des initialiseurs, vous pouvez faire quelque chose comme: p> ou vous pouvez perdre le Typedef code> pour l'initialiser directement: < / p>