[elektro] C struktura kérdés

hg12345 hg12345 at freemail.hu
Fri Apr 16 18:15:19 CEST 2010


Üdv

Sajnos nem nyert, mert ha Ti elgondolásotok szerint definiálom, akkor a
 ITEMu_t-ban nevet kell adnom ennek a struct-nak és pont ezt nem szeretném.


  Szia!

Oké, ha jó értem, akkor tagITEMu struct utolsó uninjában lévő struct-ot
szeretnéd használni a tagITEMstatus structban. Erre is áll amit Arnold
mondott, tehát hogy a két struct előtt van egy typedef struct és ezt
használod mindkettőben.

Üdv,
Lajos

2010/4/16 hg12345 <hg12345 at freemail.hu>

> Ám legyen  :-)
> Szerintem ebből se értetek többet.
>
> Azért használok typedef-t mert így egyszerűbb később a kezelése.
>
> A második typedef-be szeretném a "Legacy"  structuráját átmenteni.
> A jelenlegi kis különséget még tudom oldani, nem ez a problémám :-)
> --------------------------------------------------------------------
> typedef struct tagITEMu{
>                        struct{
>                                        iStr_t          iString:12;
>                                     //String Index
>                                        unsigned        No:4;
>                                                     //kisegitő sorszám
>                                        };
>
>                        union{
>                                struct{
>                                        unsigned        Default:12;
>                             //default érték
>                                        unsigned        Ch:4;
>                                             //csatorna sorszám
>                                };
>                                struct{
>                                        unsigned        ItemDelta:12;
>                     //a menü blokk mérete....... (igy nagyobb területet
> tudok definiálni)
>                                };
>                        };
>
>                        union{
>                                unsigned int     Tag3rd;
>                            //ezt nem használom sehol csak az érték
> adásnál....
>                                MIndex_t        ItemStart;
>                                    //következő ITEM kezdö címe...  (nincs
> meghatározva a kezdő hely!!!!)
>                                unsigned int    *pRam;
>                            //Ram ban tárol érték, elvileg ezt is tudom
> korlátozni erre a tartományra....
>                                struct {
>                                        unsigned                SelIndex:1;
>                                     //kulső vagy helyettesítő index
>                                        eE2index_t      E2Index:15;
>                             //külső memória cim
>                                        };
>                                unsigned short  Address;
>    //Második memória szó
>                        };
>
>                        union{
>                                unsigned short  Legacy;
>                     //hozzáféréssel kapcsolatos adatok
>                                void (*pF)(struct tagITEMu *p);
> //függvény pointer  ezért a legalsó bitje mindig nulla!, a pointer a
> változtatások miatt szükséges
>                                struct{
>                                        FunctConst_t    SelFunct:1;
>                     //0: a tárol érték egy függvény címet takar....  1:
> konstans megadás
>                                        unsigned        :2;
>                             //!!! Free szabadon felhasználható
>                                        EditType_t              EditType:5;
>                             //állítási tipus
>                                        DecPoint_t              DecPoint:4;
>                             //decimál point
>                                        Access_t
>  Access:4;                                       //hozzáférési jog
>                                        };
>                        };
>                } ITEMu_t;
>
>
> typedef struct tagITEMstatus{
>                                        unsigned
>  Live:1;                                         //0: ez a csatorna nem
> létezik, 1 a csatorna létezik....
>                                        unsigned        :2;
>                             //!!! Free szabadon felhasználható
>                                        EditType_t              EditType:5;
>                             //állítási tipus
>                                        DecPoint_t              DecPoint:4;
>                             //decimál point
>                                        Access_t
>  Access:4;                                       //hozzáférési jog
>                                }ITEMstatus_t;
>
>
> --------------------------------------------------------------------
>
>
>
>
>
>
>
>  Szia!
>
> Ezt nem értem (az elsőt sem). Meg tudnád magyarázni egy bővebb példával?
> Annyira leegyszerűsítetted, hogy nem érthető :o
>
> Üdv,
> Lajos
>
> 2010/4/16 hg12345 <hg12345 at freemail.hu>
>
> > Ettől féltem :-(
> >
> > Mint említettem ez csak egy kiragadott példa.
> > Az eredeti helyzetben egy ROM-ban összetett konstans leírását tartalmazza
> a
> > strutc. Majd ez a struct igen sok helyen szerepel további struct
> belsejében.
> > Mire leírom a teljes kifejtést, nem férek el monitoron, pedig nem kicsi,
> és
> > értelmetlen lenne külön kifejteni a bitselect, mikor az többivel együtt
> > értelmes.
> >
> > Ez a kis darab máshol és más környezetben szerepel, de a végén találkozik
> > az eredeti struct-val
> >
> > Én nem akartam nevet adni a változó résznek, csak a struct-nak, hogy
> később
> > hivatkozni tudjak erre a struct meghatározásra. Minden meghatározást
> > szeretek egyszer definiálni, és a fordító bábáskodására bízom magamat és
> > programomat.
> >
> >  pontosan nem ertelek, de:
> >
> > typedef struct{
> >           unsigned b1:1;
> >           unsigned b2:1;
> >           };
> >
> > }AAA_T;
> >
> > typedef  union {
> >          long   V1;
> >         AAA_T tagAAA;
> >          } TEST_t;
> >
> >
> > miert nem jo?
> >
> > A.
> > On 2010. 04. 16. 15:32, hg12345 wrote:
> > > Hi!
> > >
> > > Hogyan lehet egy unnamed struct struktura nevet adni?
> > >
> > > typedef  union {
> > >          long   V1;
> > >           struct tagAAA{
> > >            unsigned b1:1;
> > >            unsigned b2:1;
> > >           };
> > >          } TEST_t;
> > >
> > >
> > > typedef struct tagAAA  AAA_t;
> > >
> > > és későbbiekben ezt a typedef-et szeretném használni. A belső
> > strukturának nem szeretnék nevet adni (unnamed).
> > >
> > > A fordító említi, hogy a tagAAA nem definiáltam ami jogos is.
> > > Ezért később nem is tud rá hivatkozni.
> > >
> > > Ha felcserélem a TYPEDEF meghatározásokat vagy csak struct névvel
> > definiálom ekkor nem tudok unnamed struct létrehozni, mert változó névre
> > szükség van!
> > >
> > > #define esetén, meg nem válik azonos típusúvá  a két struktura, ezért
> > castolás nélkül nem tőtlhetők egymásba.
> > >
> > > A fenti példa csak egy egyszerűsítés de a lényeg jól látszik belőle.
> > >
> > > Van erre megoldás?
> > >
> > > -----------------------------------------
> > >           elektro[-flame|-etc]
> > >
> >
> > -----------------------------------------
> >          elektro[-flame|-etc]
> >
> > -----------------------------------------
> >          elektro[-flame|-etc]
> >
> -----------------------------------------
>          elektro[-flame|-etc]
>
> -----------------------------------------
>          elektro[-flame|-etc]
>
-----------------------------------------
          elektro[-flame|-etc]



More information about the Elektro mailing list