/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
Bech_bb 500
kyllekylle 500
jdjespers.. 500
gibson 300
scootergr.. 300
molokyle 287
10  strarup 270
Global union hjælp !!!
Fra : Kåre


Dato : 05-10-05 09:38

Jeg har pt en union i en .c fil, som jeg ønsker global adgang til.
Men uanset hvad jeg prøver, vil compileren ikke æde den.

I min .h fil har jeg følgende:

union test_union
{
char var1;
short var2;
};

extern test_union union_1;


Og i .c :

test_union union_1;


Compileren brokker sig gevaldigt.
Placerer jeg bare hele skidtet i .c filen, og bruger den lokalt er der
ingen problemer.

Please......
Kåre


 
 
Arne Vajhøj (05-10-2005)
Kommentar
Fra : Arne Vajhøj


Dato : 05-10-05 09:55

Kåre wrote:
> Jeg har pt en union i en .c fil, som jeg ønsker global adgang til.
> Men uanset hvad jeg prøver, vil compileren ikke æde den.
>
> I min .h fil har jeg følgende:
>
> union test_union
> {
> char var1;
> short var2;
> };
>
> extern test_union union_1;
>
>
> Og i .c :
>
> test_union union_1;
>
>
> Compileren brokker sig gevaldigt.
> Placerer jeg bare hele skidtet i .c filen, og bruger den lokalt er der
> ingen problemer.

Kan du konkretisere "brokker sig gevaldigt" ?

Arne

PS: C eller C++ fordi i C skal du have union foran navnet
medmindre du har en typedef

Kåre (05-10-2005)
Kommentar
Fra : Kåre


Dato : 05-10-05 10:42

Jeg har lige løst problemet!

Jeg måtte lave en typedef struct, og så putte min union derind.

Kåre


Bertel Brander (05-10-2005)
Kommentar
Fra : Bertel Brander


Dato : 05-10-05 18:35

Kåre wrote:
> Jeg har lige løst problemet!
>
> Jeg måtte lave en typedef struct, og så putte min union derind.

Det lyder som en unødvendig bøvlet omgåelse af et problem...

--
Absolutely not the best homepage on the net:
http://home20.inet.tele.dk/midgaard
But it's mine - Bertel

Kåre (05-10-2005)
Kommentar
Fra : Kåre


Dato : 05-10-05 21:33


"Bertel Brander" <bertel@post4.tele.dk> skrev i en meddelelse
news:43440eb6$0$178$edfadb0f@dread11.news.tele.dk...
> Kåre wrote:
>> Jeg har lige løst problemet!
>>
>> Jeg måtte lave en typedef struct, og så putte min union derind.
>
> Det lyder som en unødvendig bøvlet omgåelse af et problem...
>

Bestemt. Og det ser tilmed rigtig grimt ud.
Men det dur...

Kåre



Richard Flamsholt (05-10-2005)
Kommentar
Fra : Richard Flamsholt


Dato : 05-10-05 23:46

"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

Søg
Reklame
Statistik
Spørgsmål : 177428
Tips : 31962
Nyheder : 719565
Indlæg : 6407944
Brugere : 218877

Månedens bedste
Årets bedste
Sidste års bedste