[elektro] C fordítás közbeni adat kiírás
Zoltán Gyarmati
profikam at gmail.com
Thu Jan 10 18:49:07 CET 2013
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
More information about the Elektro
mailing list