Gå til innhold

Stemmer dette om struct?


Anbefalte innlegg

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
Videoannonse
Annonse
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 av Myubi
Lenke til kommentar
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 av Nazgul
Lenke til kommentar
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 :blush:

Lenke til kommentar

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 av A_N_K
Lenke til kommentar
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? (:p)

 

 

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

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 av Nazgul
Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...