¿Están los siguientes equivalentes en C?struct y typedef
// #1
struct myStruct {
int id;
char value;
};
typedef struct myStruct Foo;
// #2
typedef struct {
int id;
char value;
} Foo;
Si no, ¿cuál debo usar y cuándo?
¿Están los siguientes equivalentes en C?struct y typedef
// #1
struct myStruct {
int id;
char value;
};
typedef struct myStruct Foo;
// #2
typedef struct {
int id;
char value;
} Foo;
Si no, ¿cuál debo usar y cuándo?
No, no son exactamente equivalentes.
En la primera versión Foo
es un typedef para el nombre struct myStruct
.
En la segunda versión, Foo
es un typedef
para un struct
sin nombre.
Aunque ambos Foo
se pueden usar de la misma manera, en muchos casos existen diferencias importantes. En particular, la segunda versión no permite el uso de una declaración directa para declarar Foo
y la struct
es typedef
mientras que la primera lo haría.
La segunda opción no puede hacer referencia a sí mismo. Por ejemplo:
// Works:
struct LinkedListNode_ {
void *value;
struct LinkedListNode_ *next;
};
// Does not work:
typedef struct {
void *value;
LinkedListNode *next;
} LinkedListNode;
// Also Works:
typedef struct LinkedListNode_ {
void *value;
struct LinkedListNode_ *next;
} LinkedListNode;
La primera forma permite hacer referencia a la estructura antes de la definición de tipo se ha completado, por lo que puede referirse a la estructura en sí misma o tienen tipos mutuamente dependientes:
struct node {
int value;
struct node *left;
struct node *right;
};
typedef struct node Tree;
o
struct A;
struct B;
struct A {
struct B *b;
};
struct B {
struct A *a;
};
typedef struct A AType;
typedef struct B Btype;
Se pueden combinar los dos, así:
typedef struct node {
int value;
struct node *left;
struct node *right;
} Tree;
typedef struct A AType; // You can create a typedef
typedef struct B BType; // for an incomplete type
struct A {
BType *b;
};
struct B {
AType *a;
};
http://stackoverflow.com/questions/1083959/purpose-of-stru ct-typedef-struct-in-c – karlphillip
http://stackoverflow.com/questions/252780/why-should-we-typedef-a-struct-so-often-in-c – karlphillip