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