[elektro] C-s IDE kérdés

hg12345 hg12345 at freemail.hu
Thu Mar 29 10:39:38 CEST 2012


Szia, értem.

Nem csak végértékre vagyok kiváncsi! A közbenső indexek értékeire, föleg ezekre.
Nagyon sok ilyen indexem van, és debuggoláskor nem mindig tudom az értékét (nem mindig oldható, meg hogy enum alapú tipussal definiáljam a változót) Az EEPROM definiállás esetén meg a laphatárra illesztésnél jól jönnek a az értékek. 

Lajos Rancz <lajos.rancz at gmail.com> írta:
>Helló!>
>
Belejegyzetelek a leveledbe!>
>
2012. március 29. 10:18 hg12345 írta, <hg12345 at freemail.hu>:>
>
> Szia,>
> köszönöm a segítséget,>
> de nem értem :-( !!!!>
>>
> #define ASSERT_CONCAT_(a, b) a##b>
> #define ASSERT_CONCAT(a, b) ASSERT_CONCAT_(a, b)>
> #define ct_assert(e) enum { ASSERT_CONCAT(assert_line_, __LINE__) =>
> 1/(!!(e)) }>
>>
> Az első két sor még megy, ugyan a duplázás miért fontos számomra homály.>
>>
>
A duplázás azért fontos, hogy az eredmény mindenképpen 0/1 legyen ha a>
bejövő érték nem is ilyen volt.>
>
>
> A harmadik sor létrehoz egy assert_line_XXXX alaku enumot, aminek ez>
> érteke 1 lenne, de az>
> !!(e) szerint változik, ha e=0 (FALSE) akkor nem tudom mit csinál mert>
> nullával nem osztunk, minden más esetben 1.>
>>
>
Épp ez a lényeg! Mert a 0-val való osztás kiderül futási időben => nem>
fordul a kód!>
Tehát pl:>
ct_assert(sizeof(int) == 4) // ez nem fog fordulni ha int nagysága 16 vagy>
64 bit.>
>
Ez az egész arra való, hogy fordítási idejű limiteket tegyél a programba.>
Pl a te esetedben>
ct_assert(myenum_last * sizeof(record) < 8192);  // record-okat tartunk egy>
8192 bajt nagysagu EEPROM-ban, myenum_last az utolso elem az enumok kozt>
>
Üdv>
----------------------------------------->
          elektro[-flame|-etc]>




More information about the Elektro mailing list