/ / Unikanie ostrzeżeń „redefinicja typedef” podczas definiowania struktur - c, gcc, struct, typedef

Unikanie "redefinicji typedef" ostrzeżeń przy definiowaniu struktur - c, gcc, struct, typedef

Definiuję niektóre struktury, do których się odwołująnawzajem i wpisujemy struktury przed ich użyciem, więc każda struktura jest „świadoma” innych (otrzymywała błędy kompilacji bez tego). Nie jestem pewien, czy jest to konieczne, czy poprawne.

Teraz podczas kompilacji z gcc otrzymuję „redefinicję ostrzeżeń typedef”. Jak właściwie to zrobić?

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;
};

AKTUALIZACJA: Głupie, złe wklejanie kopii spowodowało powstanie tego nagłówkadwa razy dołączony do innego pliku. Jestem nowy w C i pomyślałem, że to musi mieć coś wspólnego z dwukrotnym umieszczeniem struktur w pliku. Dziękuję @Kevin Ballard za zgłoszenie się.

Odpowiedzi:

5 dla odpowiedzi № 1

To dobry przykład, dlaczego potrzebne są zabezpieczenia nagłówka / włączenia:

#ifndef MY_HEADER_FILE
#define MY_HEADER_FILE

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

#endif

0 dla odpowiedzi nr 2

W kodzie nie ma błędu, który widzę teraz po dodaniu średników. Możesz też po prostu przekazać dalej takie typy:

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;

Twoja droga jest w porządku, unika pisania struct kilka razy.