144
ROZDZIAŁ 19. TYPY ZŁOŻONE
e ■ A;
u.a • 0;
3.a • 0;
return e ♦ u.a + s.a;
Nie jest to jednak poprawny kod C i należy o tym pamiętać szczególnie jeżeli uczysz się języka C korzystając z kompilatora C+-f.
Należy również pamiętać, że po klamrze zamykającej definicje musi następować średnik. Brak tego średnika jest częstym błędem powodującym czasami niezrozumiałe komunikaty błędów. Jedynym wyjątkiem jest natychmiastowa (kdinicja zmiennych danego typu. na przykład:
struct Struktura { int pole;
Definicja typów wyliczeniowych, unii i struktur jest lokalna do bloku. To znaczy, możemy zdefiniować strukturę wewnątrz jednej z funkcji (czy wręcz wewnątrz jakiegoś bloku funkcji) i tylko tam będzie można używać tego typu.
Częstym idiomem w C jest użycie typedef od razu z definicją typu, by uniknąć pisania onum. union czy struct przy deklaracji zmiennych danego typu.
typedef struct struktura { int pole;
> Struktura;
Struktura sl; struct struktura s2;
W tym przypmlku zmienne sl i s2 są tego samego typu. Możemy też zrezygnować z nazywania samej struktury:
typedef struct { int pole;
} Struktura;
Struktura sl;
Wskaźnik na unię i strukturę
Podobnie, jak na każdą inną zmienna, wskaźnik może wskazywać także na unię lub strukturę. Oto przykład:
typedef struct { int pl, p2;
} Struktura;
int main O
Struktura s = { 0, 0 >;
Struktura *wsk - &s; wsk->pl ■ 2; vsk->p2 - 3; return 0;
Zapis vsk->pl jest (z definicji) równoważny (•wsk).pl. ale bardziej przejrzysty i powszechnie stosowany. Wyrażenie usk.pl Spowoduje błąd kompilacji (strukturą jest »usk a nie usk).