[elektro] 2nd C typedef kérdés
Palasik Sandor
palasik at mail.datanet.hu
Fri Apr 25 17:21:06 CEST 2008
> Mivel nem tudok a struct/union-ban sajátmagára hivatkozó typedef
> definiciót használni, (valószinüleg forditás kifejtési sorrendje
> okozza)
Arra gondolsz, hogy mondjuk a
typedef struct valami_struct {
valami_typedef *ptr;
} valami_typedef;
nem fordul le?
Mert ezt úgy meg lehet oldani, hogy:
typedef struct valami_struct valami_typedef;
struct valami_struct {
valami_typedef *ptr;
} ;
De akár úgy is, hogy
typedef struct valami_struct {
struct valami_struct *ptr;
} valami_typedef;
> _CONDFUNC(CondAlr) {}
> ez lefordul és müködik is.
>
> azt gondoltam az alábbi definició azonos a fentivel:
> condfunc_t CondAlr(union tagITEMu *p ) {}
> Ez komoly hibát generál és nem fordul le.
Nem azonos, mert a condfunc_t az maga egy függvény típus. Ebben a
szintaxisban viszont a condfunc_t a visszatérési érték, úgyhogy a fordító
panaszkodik, hogy függvényt akarsz visszaadni, ami nem megy, de gondolom,
hogy nem is ezt akarod.
Én nem láttam még hasznát a függvénytípusnak, mint typedefnek, mert egyedül
arra jó, hogy pointertípust csináljak belőle. Nem tilos ilyet csinálni, de
nem tűnik hasznosnak sem :-)
> Ezzel szemben a
> pcondfunc_t CondAlr(union tagITEMu *p ) {}
Igen, mert ez függvénypointert ad vissza. Pointert lehet, egész függvényt
nem.
Nem látom, hogy milyen feladatot akarsz megoldani, de úgy tűnik, hogy
gépelést akarsz spórolni. Lehet, hogy nem kéne küzdeni a typedeffel, hanem
egyszerűen használni a makrót mindenütt. Ha meg nem vagy benne biztos, hogy
mire fejtődik ki, a preprocesszor eredményét mindig meg lehet nézni.
Az is a preprocesszor eredményéből derül ki, hogy az, amit te azonosnak
gondolsz, ő így értelmezi:
void(CondAlr)(union tagITEMu *p ) {}
illetve
condfunc_t CondAlr(union tagITEMu *p ) {}
Palasik Sándor
More information about the Elektro
mailing list