Typedef struct valami{}valami;?
ez különbözik valamiben ettől?
typedef struct{}valami;










De, különbözik.
Második esetben pl. nem működik ez:
struct valami x;





Na, akkor tisztázzuk, hogy mi is ez az egész. Ne felejtsük el, ANSI C-ben vagyunk és GCC-vel fordítunk.
Struct-ot akkor szoktunk csinálni, ha egy új, összetett típust akarunk létrehozni. Ez alapesetben így néz ki:
struct azonosító {
típus azonosító;
típus azonosító;
...
}
Az azonosító egy egyszerű, szabályos nevet jelent, semmi mágikusat. A típus pedig bármilyen korábban deklarált típus lehet.
Innentől kezdve, hogy ezt te leírtad, ez a struct megjelenik, mint típus. Tehát csinálhatsz struct xy típusú változókat:
struct xy valami;
Csak ugye ezt így hosszú kiírni. Ekkor jön a typedef, amelynek az a lényege, hogy egy már meglévő típushoz egy másik azonosítót rendel:
typedef régi_típus_azonosítója új_azonosító;
Szóval:
typedef struct azonosító {
...
} új_azonosító;
Ez annyiban egyszerűsíti a dolgokat, hogy:
új_azonosító valami;
Jogos a kérdés, hogyha így typedef-fel akarok "létrehozni" egy struct-ot, minek írjam le kétszer a nevét? Így megteheted azt, hogy a struct-nak nem adsz nevet:
typedef struct {
} azonosító;
Ezzel egészen addig nincs is gond
typedef struct {
itt nem akarsz ugyanerre a típusra hivatkozni.
} azonosító;
Mert ugyebár ekkor a typedef nem adott neki új azonosítót, másik azonosítója pedig nincs, szóval you're screwed. Kénytelen vagy visszatérni a korábbi alakra:
typedef struct azonosító {
struct azonosító név;
...
} új_azonosító;





Picit másként:
A typedef formája:
typedef típusleírás új_típus_név
A típusleírásba tehetsz mondjuk struct deklarációt:
struct {...}
struct név {...}
Ahogy fentebb is írták, az egyik esetben nem nevezed meg, mert máshol úgysem hivatkozol már rá, a másik esetben pedig nevesíted (szimbólumot rendelsz hozzá), így máshol is használhatod, mint típus azonosítót.
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!