Wpis z mikrobloga

Jak w czystym c zrobić strukturę typu drzewo?
Mam takie coś:

typedef struct
{
char data;
struct node* dot;
struct node* dach;
} node;

node Code4 = {'4',NULL,NULL};
node Code5 = {'5',NULL,NULL};
node H = {'H',&Code5,&Code4};

Ale kompilator się oburza, że:
main.c:26:1: warning: initialization from incompatible pointer type [enabled by default]
node H = {'H',&Code5,&Code4};
^
main.c:26:1: warning: (near initialization for 'H.dot') [enabled by default]
main.c:26:1: warning: initialization from incompatible pointer type [enabled by default]
main.c:26:1: warning: (near initialization for 'H.dach') [enabled by default]

#naukaprogramowania #jezykc
  • 13
  • Odpowiedz
@Wladimir_Ilijicz: struct name {}; to definicja jakiejś struktury, bez definicji typu, za to
typedef struct {} typeName; definiuje nowy typ strukturalny. a skoro to typ, to używasz jak każdego innego typu np.
typeName object;

typedef struct node node;

To nie wywala żadnego ostrzeżenia?
  • Odpowiedz
@Analityk: owszem, struct name {}; to definicja struktury, za to typedef struct node node; nadaje "struct node" nową nazwę "node". Dlaczego by miało wywalać ostrzeżenie? Dość tajemniczy za to jest fakt, że definicja przy pomocy typedef struct {} name; prowadzi do błędów jak wyżej.
  • Odpowiedz
@Analityk: struct node to nie jest nazwa zmiennej. Gdy definiujesz strukturę, używasz konstrukcji: struct name { ... }; i nie jest to deklaracja. Tworzysz typ "struct name". Właściwej deklaracji dokonujesz poprzez: struct name instancename; i w tym przypadku instancename to nazwa zmiennej. Przykład z kodu źródłowego Linuksa: definicja struct ieee80211hw (czyli typu!) oraz deklaracja zmiennej o nazwie "hw" typu "struct ieee80211hw" (w ciele innej struktury).

Zawinięcie tego w typedef to
  • Odpowiedz