2011-02-28 3 views
5

Doublons possibles:
Purpose of struct, typedef struct, in C++
typedef struct vs struct definitionstypedef struct et enum, pourquoi?

Dans le code que je suis maintenant je vois souvent les éléments suivants:

typedef enum { blah, blah } Foo; 
typedef struct { blah blah } Bar; 

Au lieu de:

enum Foo { blah, blah }; 
struct Bar { blah blah }; 

J'utilise toujours ce dernier, et c'est la première fois que je vois le premier. La question est donc de savoir pourquoi utiliser un style plutôt qu'un autre. Des avantages? Aussi sont-ils fonctionnellement identiques? Je crois qu'ils sont mais je ne suis pas sûr à 100%.

Répondre

9

En C++ cela n'a pas d'importance.

En C, struct s, enum s et union s étaient dans un « espace de noms » différents, ce qui signifie que leurs noms pourraient entrer en conflit avec les noms de variables. Si vous dites

struct S { }; 

Vous pourriez dire quelque chose comme

struct S S; 

et cela voudrait dire que struct S est le type de données et S est le nom de la variable. Vous ne pouvez dire

S myStruct; 

en C si S était un struct (et non un nom de type), afin que les gens ont juste utilisé typedef pour éviter de dire struct tout le temps.

+0

'enum',' union' et 'struct' ont le même problème. – Mehrdad

+0

Oui, j'ai relu votre réponse et l'ai réalisé, puis j'ai supprimé mon commentaire. Oops. Merci! – anio

+0

@anio: Haha d'accord, pas de problème. – Mehrdad

3

Ils sont pour la compatibilité C. Une normale

struct Bar { blah, blah }; 

ne fonctionne pas de la même manière avec C;