[elektro] C fordítás közbeni adat kiírás

hg12345 hg12345 at freemail.hu
Thu Jan 10 19:18:51 CET 2013


Azért a normál C-ben ez erösen kérdése, ha aleírásod szerint igy lenne,

akkor nem kiabálna a fordító

egy ilyen enum megadásra

#define A       Nev
#define B       Sorszam

enum .... { A##B, ...}

ezt azért erösen zokon veszi, pedig a helyettesítésre már minden készen áll.

"Zoltán Gyarmati" <profikam at gmail.com> írta:
>Igen, ez vilagos, az idezett megoldas a>
"Az kész röhely, hogy fordítási időben egyetlen define vagy macróban>
számolt konstans értéket nem lehet kilistázni!">
kitételre volt valasz, es irtam is utana, hogy az enum az mas teszta :)>
>
SZIGETI Szabolcs <szigiszabolcs at gmail.com> írta (2013. január 10. 18:27):>
> 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]>
>>>
> ----------------------------------------->
>           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