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 № 1To 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.