Peter Skrevet 15. august 2005 Del Skrevet 15. august 2005 Stemmer det at typisk (ANSI) C syntaks er: typedef struct MinStruct { int abc; char* xyz; } MinStruct_t; MinStruct_t x; Mens C++ er: struct MinStruct_t { int abc; char* xyz; }; MinStruct_t x; Grunnen til at jeg spør er at jeg har sett en del definisjoner som dette: typedef tagMINSTRUCT { (...) } MINSTRUCT, *pMINSTRUCT; og jeg har lurt på hvordan akkurat dette fungerer, og hva som skulle være fordelen? Lenke til kommentar
☀ ❄ Skrevet 15. august 2005 Del Skrevet 15. august 2005 (endret) Stemmer det at typisk (ANSI) C syntaks er: typedef struct MinStruct { int abc; char* xyz; } MinStruct_t; MinStruct_t x; Mens C++ er: struct MinStruct_t { int abc; char* xyz; }; MinStruct_t x; _t-suffikset brukes stort sett ikke i C++, og vi har en tendens til å foretrekke class fremfor struct, men bortsett fra det stemmer det, ja. Grunnen til at jeg spør er at jeg har sett en del definisjoner som dette: typedef tagMINSTRUCT { (...) } MINSTRUCT, *pMINSTRUCT; og jeg har lurt på hvordan akkurat dette fungerer, og hva som skulle være fordelen? Mangler det ikke et struct/class-nøkkelord? I alle fall, så vidt jeg kan tyde, definerer den setningen typen MINSTRUCT til å være en vanlig struct tagMINSTRUCT, og den definerer typen pMINSTRUCT til å være en peker til en struct tagMINSTRUCT. Men det kan godt hende at jeg tar feil. Edit: Fordelen er at man slipper å skrive struct MINSTRUCT hver gang man skal referere til typen. Endret 15. august 2005 av Myubi Lenke til kommentar
Peter Skrevet 15. august 2005 Forfatter Del Skrevet 15. august 2005 (endret) Mangler det ikke et struct/class-nøkkelord? Men det kan godt hende at jeg tar feil. Edit: Fordelen er at man slipper å skrive struct MINSTRUCT hver gang man skal referere til typen. Jo, beklager. Det skulle være struct der. Eneste nytteverdien jeg så også var at man slapp å skrive struct struct-navn slik som du sa, men jeg så liksom ikke helt at dette kunne bety så mye. Jeg bruker class til nesten alt, men dersom det ikke er noen funksjoner bruker jeg heller struct. Vet at jeg kan bruke struct og class om hverandre, men synes det gir en grei oversikt. class: objekt med funksjoner. struct: object som holder flere verdier sammen på en grei og oversiktlig måte, men uten funksjoner. Endret 15. august 2005 av Nazgul Lenke til kommentar
☀ ❄ Skrevet 15. august 2005 Del Skrevet 15. august 2005 Jeg bruker class til nesten alt, men dersom det ikke er noen funksjoner bruker jeg heller struct. Vet at jeg kan bruke struct og class om hverandre, men synes det gir en grei oversikt. class: objekt med funksjoner. struct: object som holder flere verdier sammen på en grei og oversiktlig måte, men uten funksjoner. Jepp, vanlig måte å gjøre det på, og jeg gjør det ofte selv. I alle fall når jeg ikke gidder å skrive tilgangsfunksjoner Lenke til kommentar
A_N_K Skrevet 15. august 2005 Del Skrevet 15. august 2005 (endret) Tingen er at i C må man prefikse bruken av struct-typer med 'struct', dette slipper man (gudskjelov) i C++. For å slippe dette peset pleier C-programmerere å typedef'e struct-definisjoner. Når man refererer til typedef'en slipper man å prefikse med struct, siden det er snakk om en typedef'et type og ikke struct (direkte i alle fall). Dvs. at det er en "hack" for å kunne skrive mindre. Grunnen til at det henges på en '_t' er for å angi at dete er en typedef, ikke så uvanlig i C++ heller vil jeg tro men altså ikke nødvendig med struct. Endret 15. august 2005 av A_N_K Lenke til kommentar
☀ ❄ Skrevet 15. august 2005 Del Skrevet 15. august 2005 Tingen er at i C må man prefikse bruken av struct-typer med 'struct', dette slipper man (gudskjelov) i C++. For å slippe dette peset pleier C-programmerere å typedef'e struct-definisjoner. Når man refererer til typedef'en slipper man å prefikse med struct, siden det er snakk om en typedef'et type og ikke struct (direkte i alle fall). Dvs. at det er en "hack" for å kunne skrive mindre. Grunnen til at det henges på en '_t' er for å angi at dete er en typedef, ikke så uvanlig i C++ heller vil jeg tro men altså ikke nødvendig med struct. Edit: Fordelen er at man slipper å skrive struct MINSTRUCT hver gang man skal referere til typen. Var det ikke det jeg sa? () For øvrig er vel _t forholdsvis vanlig for typedef-ede typer i C++ (også). Det jeg tenkte på var at man ikke ville skrevet typedef foran en klassedeklarasjon. My bad. Lenke til kommentar
A_N_K Skrevet 16. august 2005 Del Skrevet 16. august 2005 Joa, tenkte det gikk an å utdype litt. Ikke alltid C virker like logisk, greit å vite hvorfor ting er som de er. Lenke til kommentar
GeirGrusom Skrevet 16. august 2005 Del Skrevet 16. august 2005 Jeg skriver aldri typedef struct, kan ikke huske at man måtte det i C heller.... brukte Power C før. I Windows er typedef skrevet med en understrek under; typedef struct _POINTAPI {LONG X, LONG Y} POINTAPI; f.eks. (hater det at alt i Windows.h er skrevet med store bokstaver, det er så stygt å se på) Lenke til kommentar
Peter Skrevet 16. august 2005 Forfatter Del Skrevet 16. august 2005 Man _måtte_ ikke, men det var mange som gjorde det av grunner nevnt ovenfor. Enig i at capslock på alle typer i windows ser jalla ut... Lenke til kommentar
Feynman Skrevet 16. august 2005 Del Skrevet 16. august 2005 Stemmer det at typisk (ANSI) C syntaks er: typedef struct MinStruct { int abc; char* xyz; } MinStruct_t; MinStruct_t x; Nei. MinStruct_t er en variable. For å definere x må du angi typen, som jeg anta skal være MinStruct. Lenke til kommentar
Peter Skrevet 16. august 2005 Forfatter Del Skrevet 16. august 2005 (endret) Men dersom jeg gjør: typedef int INT; så vil jo ikke INT være en variabel, den vil være en type som er int. For å definere x som INT må jeg da: INT x; Tror at: struct MinStruct { int abc; char* xyz; }; typedef MinStruct MinStruct_t; er det samme som den koden du quotet, bare at denne metoden gjør det i to steg, istedet for ett. Tror det du tenkte er dette: struct MinStruct { int abc; char* xyz; } variabel1, variabel2; Her vil variabel1 og variabel2 være fullverdige variabler. Endret 16. august 2005 av Nazgul Lenke til kommentar
Peter Skrevet 16. august 2005 Forfatter Del Skrevet 16. august 2005 (endret) Vil forsåvidt bare legge til at jeg tror man også kan skrive en typedef av struct slik: typedef struct { int abc; char* xyz; } MinStruct_t; MinStruct_t x; Takk for hjelpen alle sammen, lærte noe nytt denne uken også! Endret 16. august 2005 av Nazgul Lenke til kommentar
A_N_K Skrevet 17. august 2005 Del Skrevet 17. august 2005 Mye moro med antikvariske språk :_) Lenke til kommentar
Feynman Skrevet 17. august 2005 Del Skrevet 17. august 2005 Vil forsåvidt bare legge til at jeg tror man også kan skrive en typedef av struct slik: --code-- Ja det stemmer faktisk. Det som normalt er variabel etter struct blir til type med typedef. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå