enum vs typedef enum
Tomáš Hamouz
konfery.tomas.hamouz na seznam.cz
Úterý Září 19 12:55:11 CEST 2023
Když už se trumfujeme v bizarních konstrukcích :-)
pro všechny C překladače funguje
#define SIZE_CHECK(name, size) static char* _##name##_size = !(sizeof(name)==size);
A v novějších včetně C++ zcela nudné
#define SIZE_CHECK(name, size) static_assert(sizeof(name)==size, "Velikost " TOSTRING(name) " nesouhlasi");
Někde se místo static_assert musí psát _Static_assert, funguje stejně.
Tomáš
> Jen pro zajimavost, kontrola velikosti se da udelat uz behem prekladu, i
> kdyz dost krkolome.
> Nasel jsem tuto konstrukci, kteroch chapu jen trosku resp. musim vzdycky
> trosku vic premyslet, ale funguje ;-)
> #define BUILD_BUG_ON(condition) ((void)sizeof(char[1 -
> 2*!!(condition)]))
> BUILD_BUG_ON( sizeof(app_data_cfg_t) != CFG_DATA_LEN );
> Dne 19.09.2023 v 12:08 Tomáš Hamouz napsal(a):
>> Pokud je enum součástí struktury, které je sdílená mimo vlastní systém
>> (typicky přenášena přes sériovou linku), používám buď omezení
>> velikosti přes bitfield (ale není to pak podle MISRA), a vždy za
>> definicí struktury assert na její velikost. A v rámci struktury dělám
>> "ruční" poskládání položek ve vhodném pořadí, aby se negenerovaly
>> díry, a na konci, pokud je třeba, závěrečnou položku na zarovnání
>> celé struktury.
>> Není to ideální, ale běžné nekompatibility v nastavení kompílátoru to
>> odchytí.
>>
>> Tomáš
>>
>>
>>
>>> Presne z dovodu, ze to ma "neurcitu" sirku, pouzivam enum viacmenej len ako
>>> "generator konstant"; a potom je to jedno, ci s typedef ci bez.
>>> Ano, pri ladeni mi chyba, ze gdb potom vypisuje len cislo. Vsetko ma svoje
>>> pre a proti. Mozno to svoje rozhodnutie raz prehodnotim.
>>> wek
>>
>>> ----- Original Message ---------------
>>>> Njn, ale to muze omezit prenositelnost kodu, napr. diky ruznemu
>>>> zarovnani a velikosti struktur...
>>>> V tom C++ to vypada fajn, ale to zase na MCU nepouzivam.
>>>>
>>>> Dne 19.09.2023 v 11:40 Tomáš Hamouz napsal(a):
>>>>> Re: enum vs typedef enum To je věc nastavení kompilátoru. Lze si
>>>>> vybrat mezi 32bit a minimální nutnou šířkou.
>>>>> v GCC -fshort-enums
>>>>>
>>>>> Tomáš
>>>>>
>>>>>
>>>>> Tak ono ani C neprovadi tusim pri prekladu kontrolu typu, takze je to
>>>>> spis pro lepsi orientaci. Spis me na tom stve, ze to udela 32b
>>>>> promennou tam, kde by stacilo 8.
>>> _______________________________________________
>>> HW-list mailing list - sponsored by www.HW.cz
>>> Hw-list na list.hw.cz
>>> http://list.hw.cz/mailman/listinfo/hw-list
>> _______________________________________________
>> HW-list mailing list - sponsored by www.HW.cz
>> Hw-list na list.hw.cz
>> http://list.hw.cz/mailman/listinfo/hw-list
> _______________________________________________
> HW-list mailing list - sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
Další informace o konferenci Hw-list