Re: Stavový automat, goto - enum
Pavel Hudeček
edizon na seznam.cz
Pátek Leden 27 17:38:00 CET 2023
dejme tomu, že chcete
tEnum1, který obsahuje e1=0, e2=1, e3=2
tEnum2, který obsahuje e1=10, e2=11, e3=12
V C to nejde.
C# to má tak, že když to pak chcete použít, tak musíte napsat
tEnum1 var1 = tEnum1.e2;
var1 = tEnum1.e3;
To je bezkolizní. Ale vlastně je to stejně dlouhý, jako když mám v C ty
dva enumy, ale s delšími názvy členů:
tEnum1_e1, tEnum1_e2, ... a tEnum2_e1, tEnum2_e2, ...
Mě by se líbilo, kdybych měl ty dva enumy a napsal bych třeba:
tEnum1 var1 = e2;
A překladač by použil e2 z tEnum1 a vůbec by ho nezajímalo, že zároveň
existuje e2 v tEnum2.
PH
Dne 27.01.2023 v 16:48 Miroslav Mraz napsal(a):
> Nevím jestli je to "něco takového", protože neznám C# (kolega tomu
> kdysi říkal C--), ale C++ má enum class a lze definovat i typ enum
> (uint8_t, int8_t, int32_t atd.). Kolizím lze zabránit, pokud je enum
> definován uvnitř třídy nebo funkce - nemusí být viditelný globálně.
> Snad to jde i v čistém C, nebudu to zkoušet.
>
> Mrazík
>
> On 27. 01. 23 16:38, Pavel Hudeček wrote:
>> Enum a podobné, bývají samozřejmě pro tyto účely nejlepší. Teda když
>> člověk na začátku ví, že to bude stavový automat.
>>
>> Jen je škoda, že C nemá enum jako C#, kde nedochází ke kolizím. Ten C
>> enum se vlastně chová jako sada nezávislých definů. Teda to C# to má
>> zas na můj vkus přehnaný. Mě by stačilo, kdyby bez přetypování nešlo
>> použít hodnoty z jiného enumu, než je typ proměnné/parametru.
>>
>> Nemá něco takového nějaké novější C++?
Další informace o konferenci Hw-list