[elektro] C fordítás közbeni adat kiírás
SZIGETI Szabolcs
szigiszabolcs at gmail.com
Thu Jan 10 18:27:17 CET 2013
Hali!
Igen, csak lássuk be, hogy a #define meg az enum az különbözik, igaz C-ben
nem nagyon. A define egy sima preprocesszálás, amely nagyrészt szöveg
szerinti helyettesítés. A fenti példa nem csinál mást, mint némi
bűvészkedés után előállítja azt a sort, hogy #pragma message "A bitek
száma: 8".
Az enumot meg nyelvi elem és a fordító dolgozza fel (ekkor már nincs is
#pragma message meg társai, hiszen azokat a preprocesszor már megette.).
Ilyenkor már csak a nylevi fordítással kapcsolatos üzenetek jöhetnek elő.
Nem azt mondom persze, hogy nem lehetne olyan fordítót csinálni, ami
fordítási időben ki tudná írni az enumok értékét, de szerintem erre
elenyésző az igény, ráadásul ugye c++-ban, meg újabb nyelvekben az enum már
nem álruhás int, hanem típusa van (ahogy kell), így biztosan csak a
fordítás későbbi szakaszában kerül feldolgozásra és az sem biztos, hogy van
ésszerűen kiírható reprezentációja, így a compiler készítők sem fognak
ilyen egzotikus problémákat megoldani.
Szabolcs
2013. január 10. 18:15 Zoltán Gyarmati írta, <profikam at gmail.com>:
> Akkor megse ertettelek, a #define makro ertekeket ki lehet iratni, ld
> pl itt:
> http://stackoverflow.com/questions/1562074/how-do-i-show-the-value-of-a-define-at-compile-time
> ,
> azaz pl igy:
>
>
> #define XSTR(x) STR(x)
> #define STR(x) #x
>
> #define BITS 8
> .
> .
> .
> #pragma message "A bitek szama: " XSTR(BITS)
> .
> .
> main{
>
> }
>
>
>
> amit szerintem nem lehet, az az, hogy egy enum auto-enumerated
> ertekeit kiiratani. Azt mar csak remelni tudom, hogy ez a "pure C"
> fordito is tudja ezt, de elvileg a fenti megoldas az standard.
>
>
>
>
> hg12345 <hg12345 at freemail.hu> írta (2013. január 10. 17:54):
> > A forditó egy pure C (C99 opciókkal), maradnék a hordozható bárhol
> kisegítő programok nélkül forditható verziónál.
> >
> > Köszönöm mindenkinek a segítséget
> >
> > Üdv
> >
> >
> >
> >
> > "Zoltán Gyarmati" <profikam at gmail.com> írta:
> >>hm, kb ertem :)>
> > En lehet elgondolkodnek azon, hogy ezt a tombot forditas elott egy>
> > scripttel generaltatnam a makefilebol, es ugyanez a script definialna>
> > makrokat is az egyes elemekhez egy szinten generalt header fileban,>
> > majd ahol ezeket az ertekeket hasznalni akarod, oda a makrokat irod,>
> > mikor kodolsz, meg persze beincludold ezt a generalt headert. Ebben a>
> > scriptben persze aztan azt irathatnal ki amit akarsz, sot, valami>
> > olyasmit is lehetne trukkozni, hogy te egy egyszeru textfileban csak>
> > definialod a menu szerkezetet (de ez lehet akar xml is), majd a>
> > tombodet meg a makrokat ebbol generalna a script. Persze ehhez kell>
> > venni egy nagy levegot, es raszanni egy munkanapot, de utana szerintem>
> > konnyebb lenne az eleted.>
> >>
> > hg12345 <hg12345 at freemail.hu> írta (2013. január 10. 17:01):>
> >> Nehéz elmagyarázni,>
> >>>
> >> A készülék menüje egy tömbben van tárolva (több mint 400 bejegyzés) , a
> tömb indexe az enummal meghatározott felsorolás tipus. Ez a tömb nem tömb,
> hanem egy többszörös fa struktura tömbben tárolva. A generálás nem
> lineárisan egymás után megadva történik, hanem szerkezett szerint, igy csak
> nagyjából tudom mi hol van, de kezelés szempontjából teljesen mindegy.>
> >> Ami nem, hogy a kommunikációs felületen a tömbben való elhelyezkedés
> adja a MODBUS regiszter címét, tehát az tisztán látást segítő index alatt
> van a regiszter cimem van (rejtve), ami itt nem éppen nem szerencsés.>
> >>>
> >> A kinyerésére csak egy indexekkel feltöltött tömböt kell tárolnom,
> valami bugyuta hivatkozással, hogy ne optimalizálja ki :-(, és debug
> üzemmódban onnan kinézhetem az indexek sorszámát.>
> >>>
> >> Lassú és hosszadalmas.....>
> >>>
> >> Már mindent átnéztem, de nem találtam erre megoldást, egész egyszerűen
> nem tudom elhinni, hogy fordítási időben ennyire nem tud segíteni a
> fordító.>
> >>>
> >> SZIGETI Szabolcs <szigiszabolcs at gmail.com> írta:>
> >>>HalI!>>
> >>>>
> >> Mármint azt szeretnéd, hogy van egy enum-od, és az abban szereplő>>
> >> szimbolikus értékeknek megfelelő számot szeretnéd megtudni?>>
> >> Ez miért kell? Éppen azért van az enum, hogy az értékek ne
> homályosítsák el>>
> >> tisztánlátásunkat.>>
> >>>>
> >> Ha viszont nagyon akarod, akkor az enumban közvetlenül megadhatod az>>
> >> értéket.>>
> >>>>
> >> Szabolcs>>
> >>>>
> >>>>
> >>>>
> >> 2013. január 10. 15:51 hg12345 írta, <hg12345 at freemail.hu>:>>
> >>>>
> >>> Hi,>>
> >>>>>
> >>> már kérdeztem, de annyira hiányzik, hogy rákérdezek mégegyszer.>>
> >>>>>
> >>> Nincs megoldás fordításkozben a #warning egy enumerátor értékét
> kiírjam a>>
> >>> listázó képernyöre?>>
> >>>>>
> >>> Tölem lehet akármilyen macro, de nagyon-nagyon hiányzik egy ilyen>>
> >>> lehetöség :-((>>
> >>>>>
> >>> Fordítás után is csak egy tömbbe letéve tudom elöhívni, nincs erre>>
> >>> egyszerűbb megoldás... normál C99 fordító.>>
> >>>>>
> >>> Üdv>>
> >>>>>
> >>>>>
> >>> ----------------------------------------->>
> >>> elektro[-flame|-etc]>>
> >> ----------------------------------------->>
> >> elektro[-flame|-etc]>>
> >>>
> >>>
> >> ----------------------------------------->
> >> elektro[-flame|-etc]>
> >>
> >>
> >>
> > -- >
> > Zoltan Gyarmati>
> > Gtalk: profikam at gmail.com>
> > MSN: profikam at theend.hu>
> > ICQ: 335693662>
> > Skype: profikam3151>
> >>
> > Phone number: 0036-30-608-30-79>
> >>
> > ----------------------------------------->
> > elektro[-flame|-etc]>
> >
> >
> > -----------------------------------------
> > elektro[-flame|-etc]
>
>
>
> --
> Zoltan Gyarmati
> Gtalk: profikam at gmail.com
> MSN: profikam at theend.hu
> ICQ: 335693662
> Skype: profikam3151
>
> Phone number: 0036-30-608-30-79
>
> -----------------------------------------
> elektro[-flame|-etc]
>
More information about the Elektro
mailing list