Auf einen ganz einfachen Nenner gebracht:
In C sind enums die Energie nicht wert, die das Tippen des
Schlüsselwortes benötigt. Die C 'Implementierung' von enum ist mehr oder
weniger nutzlos. enums sind in C nicht viel mehr als eine Sammlung von
Text-Flags, die Werte repräsentieren. Mehr nicht. Gegenüber einer
Sammlung von #defines gewinnst du eigentlich nur, dass du in
Funktionsköpfen
1 | enum UnitReply foo( enum ColorValue background );
|
einen gewissen dokumentarischen Hinweis gibst, welche Werte erwartet
werden bzw. womit man als Programmierer rechnen muss. Aber: das wird von
nichts und niemandem eingefordert. In C sind enums keine eigenständigen
Typen und werden hemmungslos von und nach int konvertiert, wie es gerade
passt. Du kannst auch zb an den Paramater background, der ja eigentlich
ein enum ColorValue ist, einen Wert aus dem enum UnitReply übergeben. Da
stört sich nichts und niemand daran.
enum sind in C ernsthaft fehlerhaft. Ausser einer glorifizierten Liste
von Integern, denen man einen Namen geben kann und die man unter einem
Stichwort zusammenfasst, und die im Debugger auftauchen, bleibt nicht
viel übrig.