[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