C: Enum-Bezeichner für Wertebereich festlegen?
Wenn ich folgendes
Enumerationen bieten eine Alternative zur Präprozessordirektive und bieten den Vorteil, dass die Werte für Sie generiert werden und normalen Bereichsregeln folgen.
aus
https://learn.microsoft.com/de-de/cpp/c-language/c-enumeration-declarations?view=msvc-170
richtig interpretiere, dann kann man Enum-Bezeichner auch für bestimmte Wertebereich festlegen. Wie macht man das?
Ich möchte sowas hier haben:
typedef enum ParkHouseState {
full = 0,
barely = 1 bis 9,
free = größer als 10,
} ParkHouseState;
2 Antworten
"Bereich" bezieht sich im verlinkten Artikel nicht auf "Wertebereich", sondern "Sichtbarkeitsbereich" und nicht auf Werte, sondern auf Namen:
Die Bezeichner in der Enumerationsliste müssen sich von anderen Bezeichnern im selben Bereich mit der gleichen Sichtbarkeit unterscheiden.
Da ein enum nur syntaktischer Zucker für mehrere Integeronstantendefinitionen ist, kann man natürlich auch einem Namen nur einen einzigen Integerwert zuweisen.
-----
In einigen Sprachen, wie Pascal, ist es möglich, einen Typ zu definieren, der einen eingeschränkten Wertebereich hat, z. B.
type int10 = 1 .. 10;
(Quelle)
aber das erfordert, dass der Compiler bei jeder Zuweisung eine Prüfung einbaut. (Und es ist ein eigener Typ und kein Element einer Aufzählung.)
Ein Einbau einer Prüfung bei jeder Zuweisung würde der Philosophie von C widersprechen - Fokus auf Performanz, weshalb der Programmierer sich explizit selbst um Überprüfungen kümmern muss.
Mehrere Bezeichner können den gleichen Wert haben. Jeder Bezeichner muß aber einen eindeutigen Wert haben.