"Kåre" <kaare@raffish.dk> skrev:
>Jeg måtte lave en typedef struct, og så putte min union derind.
Dit problem var, at
union test_union { ... }
- introducerer en type, du skal referere til vha "union test_union". Det
laver ikke en type ved navn "test_union". Derfor skal du huske keywordet
union og altså skrive således for at deklarere din variabel:
extern union test_union union_1;
Det er ofte ret bøvlet at skulle skrive så meget, så derfor introducerer
man oftest et nyt navn for unions (og structs) vha typedef, således:
typedef <en type> <det nye navn for typen>
I dit tilfælde navngives din "union test_union"-type altså således:
typedef
union test_union { ... }
test_union;
(Linieskift tilføjet for at pointere bestanddelene af typedef'en)
Det laver både typen "union test_union", samt den nye type "test_union"
som bare er et andet navn for din union. Dvs ovenstående giver dig hele
to navne for den samme type, som du kan bruge i flæng. Det har man ikke
brug for i praksis, så derfor vælger man tit at undlade at give union-
typen et navn, så resultatet bliver en typedef af en unavngiven union:
typedef union { ... } test_union; // typedef af navnløs union
extern test_union union_1; // nu kan "union" udelades, hurra
Så valget er altså:
1) Undlad typedef: ja, så skal du skrive "union" foran typenavnet når du
definerer variabler af din type
2) Lav en typedef af en (navnløs) union: så får du et nyt typenavn som
du ikke behøver skrive union foran
Gammel Unix-kode definerer tit fx struct-typer uden tilsvarende typedef.
Fx returnerer localtime() en "struct tm". Men med det korte navn er det
måske meget godt, at de ikke lavede en typedef kaldet "tm", men at man
trods alt skal skrive "struct tm" for at få fat i typen
--
Richard Flamsholt
richard@flamsholt.dk -
www.richard.flamsholt.dk