/ / Evitar las advertencias de "redefinición de typedef" al definir estructuras - c, gcc, struct, typedef

Evitar las advertencias de "redefinición de typedef" al definir las estructuras - c, gcc, struct, typedef

Estoy definiendo algunas estructuras que hacen referenciaentre sí, y teclea las estructuras antes de usarlas, de modo que cada estructura esté "al tanto" de las otras (estaba obteniendo errores de compilación sin esto). No estoy seguro si esto es necesario o correcto.

Ahora, al compilar con gcc, estoy "redefiniendo" las advertencias typedef. ¿Cuál es la forma correcta de hacerlo?

typedef struct a A;
typedef struct b B;
typedef struct c C;

struct a {
B* list;
A* parent;
};

struct b {
A* current;
B* next;
};

struct c {
A* current;
A* root;
};

ACTUALIZAR: Dumb, mal pegado copiado resultó en este encabezadosiendo incluido dos veces en otro archivo. Soy nuevo en C y pensé que debía tener algo que ver con tener las estructuras en el archivo dos veces. Gracias, @Kevin Ballard, por el tema.

Respuestas

5 para la respuesta № 1

Este es un buen ejemplo de por qué se necesitan encabezados / incluir guardias:

#ifndef MY_HEADER_FILE
#define MY_HEADER_FILE

typedef struct a A;
typedef struct b B;
/* ... */

#endif

0 para la respuesta № 2

No hay ningún error en su código que pueda ver ahora que ha agregado los puntos y coma. También puede simplemente reenviar declarar los tipos así:

struct b;
struct c;

typedef struct a {
struct b* list;
struct a* parent;
} A;

typedef struct b {
A* current;
struct b* next;
} B;

typedef struct c {
A* current;
A* root;
} C;

Tu camino está bien, sin embargo, evita escribir struct unas pocas veces.