2011-02-28 20 views
5

duplicados posibles:
Purpose of struct, typedef struct, in C++
typedef struct vs struct definitionstypedef struct y enum, ¿por qué?

En código que estoy manteniendo a menudo veo lo siguiente:

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

En lugar de:

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

Siempre uso este último, y esta es la primera vez que veo el primero. Entonces la pregunta es por qué uno usaría un estilo sobre el otro. Cualquier beneficio? ¿También son funcionalmente idénticos? Creo que lo son, pero no estoy 100% seguro.

Respuesta

9

En C++ esto no importa.

En C, struct s, enum s, y union s estaban en un "espacio de nombres" diferente, lo que significa que sus nombres pueden entrar en conflicto con nombres de variables. Si usted dice

struct S { }; 

Por lo que podría decir algo como

struct S S; 

y eso significaría que struct S es el tipo de datos y S es el nombre de la variable. No se puede decir

S myStruct; 

en C si S era una (y no un nombre de tipo) struct, por lo que la gente simplemente utilizan typedef evitar decir struct todo el tiempo.

+0

'enum',' union', y 'struct' tienen el mismo problema. – Mehrdad

+0

Sí, volví a leer su respuesta y me di cuenta de eso y luego borré mi comentario. Oops. ¡Gracias! – anio

+0

@anio: Haha bien, no hay problema. – Mehrdad

3

Son aptos para la compatibilidad C. A normal

struct Bar { blah, blah }; 

no funciona igual con C;