Forskjellen mellom "struct foo *" og "foo *" der foo er en struct?

stemmer
5

I C, er det en forskjell mellom å skrive struct foo i stedet for bare foo hvis foo er en struct?

For eksempel:

struct sockaddr_in sin;
struct sockaddr *sa;

// Are these two lines equivalent?
sa = (struct sockaddr*)&sin;
sa = (sockaddr*)&sin;

Takket / Erik

Publisert på 09/01/2009 klokken 12:13
kilden bruker
På andre språk...                            


4 svar

stemmer
10

Faktisk, i standard "C" det er påkrevet å angi structsøkeord. Dette er valgfritt i C ++.

Dette er grunnen til at noen mennesker definerer structs som dette:

typedef struct foo { ... } bar;

å være i stand til å bruke bari stedet for struct foo. Men noen C-kompilatorer ikke håndheve denne regelen.

Svarte 09/01/2009 kl. 12:17
kilden bruker

stemmer
6

Ja. I C (i motsetning til C ++), structs er i sitt eget navnerom. Så hvis du har definert en

struct sockaddr { ... }

du kan ikke bruke det som

sockaddr s;
sockaddr *ps;

For å gjøre det lovlig, kan du bruke typedef for å importere til den ikke-struct navnetypenavn:

typedef struct sockaddr { ... } sockaddr;
sockaddr s, *p;
Svarte 09/01/2009 kl. 12:17
kilden bruker

stemmer
0

Det kommer an på hvordan struct er definert. Hvis det er definert ved et typedef du ikke trenger å sette stuct nøkkelordet foran.

typedef struct 
{
//
} aStruct;

aStruct abc;

men hvis det er ikke en typedef du trenger struct søkeord.

struct aStruct
{
//
} ;

struct aStruct abc;
Svarte 09/01/2009 kl. 12:18
kilden bruker

stemmer
0

Du kan bruke bare "foo" hvis du typedef det.

Svarte 09/01/2009 kl. 12:17
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more