Syntax
aufzählenEnumeration_Constant_Element-1,
Enumeration_Constant_Element-2,
Enumeration_Constant_Element-3,
… ,
Enumeration_Constant_Element-n,
;
Der Standardwert von Enumeration_Constant_Element-1 ist 0, der Wert von Enumeration_Constant_Element-2 ist 1, der Wert von Enumeration_Constant_Element-3 ist 2 und der Wert von Enumeration_Constant_Element-n ist (n-1).
Tauchen Sie ein in Enum
Da wir nun die Syntax zum Definieren des Aufzählungstyps kennen, sehen wir uns ein Beispiel an:
AufzählungsfehlerIO_ERROR,
FESTPLATTENFEHLER,
NETZWERKFEHLER
;
Das Schlüsselwort „enum“ muss immer verwendet werden, um den Aufzählungstyp zu definieren. Wenn Sie also einen Aufzählungstyp definieren möchten, müssen Sie vorher das Schlüsselwort „enum“ verwenden
Im obigen Beispiel weist der Compiler IO_ERROR dem Integralwert zu: 0, DISK_ERROR dem Integralwert: 1 und NETWORK_ERROR dem Integralwert: 2. Standardmäßig wird dem ersten Aufzählungselement immer der Wert 0 zugewiesen, dem nächsten Aufzählungselement der Wert 1 usw. and.
Dieses Standardverhalten kann bei Bedarf durch explizite Zuweisung des konstanten Integralwertes wie folgt geändert werden:
AufzählungsfehlerIO_ERROR = 2,
FESTPLATTENFEHLER,
NETZWERK_FEHLER = 8 ,
PRINT_ERROR
;
In diesem Fall wird IO_ERROR vom Programmierer explizit dem Wert 2 zugewiesen, DISK_ERROR wird vom Compiler dem Wert 3 zugewiesen, NETWORK_ERROR wird vom Programmierer explizit dem Wert 8 zugewiesen und PRINT_ERROR wird dem nächsten zugewiesen ganzzahliger Wert des vorherigen Enum-Elements NETWORK_ERROR (i.e., 9) vom Compiler.
Sie wissen jetzt also, wie Sie einen benutzerdefinierten Aufzählungstyp in C . definieren. Ist es möglich, eine Variable vom Typ Enum zu deklarieren (wie wir eine Variable vom Typ Integer deklarieren können)? Ja, so ist es! Sie können die Enum-Variable wie folgt deklarieren:
Aufzählungsfehler Hw_Error;Auch hier ist „enum“ das Schlüsselwort, „Error“ ist der Enum-Typ und „Hw_Error“ ist eine Enum-Variable.
Wir werden uns nun die folgenden Beispiele ansehen, um die verschiedenen Verwendungen von enum zu verstehen:
- Beispiel 1: Verwendung der Standard-Enum-Definition
- Beispiel 2: Verwendung einer benutzerdefinierten Aufzählungsdefinition
- Beispiel 3: Aufzählungsdefinition mit konstantem Ausdruck
- Beispiel 4: Aufzählungsbereich
Beispiel 1: Verwendung der Standard-Enum-Definition
In diesem Beispiel erfahren Sie, wie Sie den Aufzählungstyp mit Standardkonstantenwerten definieren. Der Compiler übernimmt die Zuweisung der Standardwerte an die Enum-Elemente. Unten sehen Sie das Beispielprogramm und die entsprechende Ausgabe.
#einschließen/* Definiere den Aufzählungstyp */
Aufzählungsfehler
IO_ERROR,
FESTPLATTENFEHLER,
NETZWERKFEHLER
;
int main()
Aufzählungsfehler Hw_Error; /* Enum-Variable erstellen*/
printf("Hw_Error auf IO_ERROR setzen\n");
Hw_Error = IO_ERROR;
printf("Wert von Hw_Error = %d \n",Hw_Error);
printf("\nHw_Error auf DISK_ERROR setzen\n");
Hw_Error = DISK_ERROR;
printf("Wert von Hw_Error = %d \n",Hw_Error);
printf("\nHw_Error auf NETWORK_ERROR setzen\n");
Hw_Error = NETWORK_ERROR;
printf("Wert von Hw_Error = %d \n",Hw_Error);
0 zurückgeben;
Beispiel 2: Verwendung einer benutzerdefinierten Aufzählungsdefinition
In diesem Beispiel erfahren Sie, wie Sie den Aufzählungstyp mit einem benutzerdefinierten konstanten Wert definieren. Dieses Beispiel hilft Ihnen auch zu verstehen, wie die Initialisierung der benutzerdefinierten Konstanten in beliebiger Reihenfolge erfolgen kann. In diesem Beispiel haben wir den konstanten Wert für die 1 . explizit definiertst und 3rd Aufzählungselemente (i.e., IO_ERROR bzw. NETWORK_ERROR), aber wir haben die explizite Initialisierung für die 2 . übersprungennd und 4das Elemente. Es liegt nun in der Verantwortung des Compilers, den 2 . die Standardwerte zuzuweisennd und 4das Aufzählungselemente (i.e., DISK_ERROR bzw. PRINT_ERROR). DISK_ERROR wird einem Wert von 3 zugewiesen und PRINT_ERROR wird einem Wert von 9 zugewiesen. Unten sehen Sie das Beispielprogramm und die Ausgabe.
#einschließen/* Aufzählungstyp definieren - Benutzerdefinierte Initialisierung*/
Aufzählungsfehler
IO_ERROR = 2,
FESTPLATTENFEHLER,
NETZWERK_FEHLER = 8,
PRINT_ERROR
;
int main()
/* Enum-Variable deklarieren*/
Aufzählungsfehler Hw_Error;
printf("Hw_Error auf IO_ERROR setzen\n");
Hw_Error = IO_ERROR;
printf("Wert von Hw_Error = %d \n",Hw_Error);
printf("\nHw_Error auf DISK_ERROR setzen\n");
Hw_Error = DISK_ERROR;
printf("Wert von Hw_Error = %d \n",Hw_Error);
printf("\nHw_Error auf NETWORK_ERROR setzen\n");
Hw_Error = NETWORK_ERROR;
printf("Wert von Hw_Error = %d \n",Hw_Error);
printf("\nHw_Error auf PRINT_ERROR setzen\n");
Hw_Error = PRINT_ERROR;
printf("Wert von Hw_Error = %d \n",Hw_Error);
0 zurückgeben;
Beispiel 3: Enum-Definition mit konstantem Ausdruck
In diesem Beispiel erfahren Sie, wie Sie den konstanten Ausdruck verwenden, um den konstanten Wert für Aufzählungselemente zu definieren.
#einschließen/* Aufzählungstyp definieren - benutzerdefinierte Initialisierung mit konstantem Ausdruck
konstanter Ausdruck wird hier verwendet im Fall von:
ein. IO_ERROR und
b. NETZWERKFEHLER
Dies ist eine ungewöhnliche Art, die Aufzählungselemente zu definieren; aber das
Programm zeigt, dass diese Art der Initialisierung von Aufzählungselementen in c . möglich ist.
*/
Aufzählungsfehler
IO_ERROR = 1 + 2 * 3 + 4,
FESTPLATTENFEHLER,
NETZWERK_FEHLER = 2 == 2,
PRINT_ERROR
;
int main()
/* Enum-Variable deklarieren*/
Aufzählungsfehler Hw_Error;
printf("Hw_Error auf IO_ERROR setzen\n");
Hw_Error = IO_ERROR;
printf("Wert von Hw_Error = %d \n",Hw_Error);
printf("\nHw_Error auf DISK_ERROR setzen\n");
Hw_Error = DISK_ERROR;
printf("Wert von Hw_Error = %d \n",Hw_Error);
printf("\nHw_Error auf NETWORK_ERROR setzen\n");
Hw_Error = NETWORK_ERROR;
printf("Wert von Hw_Error = %d \n",Hw_Error);
printf("\nHw_Error auf PRINT_ERROR setzen\n");
Hw_Error = PRINT_ERROR;
printf("Wert von Hw_Error = %d \n",Hw_Error);
0 zurückgeben;
Beispiel 4: Enum-Bereich
In diesem Beispiel erfahren Sie, wie die Bereichsregel für enum . funktioniert. Ein MACRO (#define) hätte verwendet werden können, um eine Konstante anstelle der Aufzählung zu definieren, aber die Bereichsregel funktioniert nicht für MACRO.
#einschließenint main()
/* Definiere den Aufzählungstyp */
Aufzählungsfehler_1
IO_ERROR = 10,
FESTPLATTENFEHLER,
NETWORK_ERROR = 3,
PRINT_ERROR
;
/* Definiere den Aufzählungstyp im inneren Gültigkeitsbereich*/
Aufzählungsfehler_1
IO_ERROR = 20,
FESTPLATTENFEHLER,
NETWORK_ERROR = 35,
PRINT_ERROR
;
/* Enum-Variable deklarieren*/
Aufzählung Error_1 Hw_Error;
printf("Hw_Error auf IO_ERROR setzen\n");
Hw_Error = IO_ERROR;
printf("Wert von Hw_Error = %d \n",Hw_Error);
printf("\nHw_Error auf DISK_ERROR setzen\n");
Hw_Error = DISK_ERROR;
printf("Wert von Hw_Error = %d \n",Hw_Error);
printf("\nHw_Error auf NETWORK_ERROR setzen\n");
Hw_Error = NETWORK_ERROR;
printf("Wert von Hw_Error = %d \n",Hw_Error);
printf("\nHw_Error auf PRINT_ERROR setzen\n");
Hw_Error = PRINT_ERROR;
printf("Wert von Hw_Error = %d \n",Hw_Error);
0 zurückgeben;
Vergleich zwischen Enum und Makro
Aufzählung | Makro |
Bereichsregel gilt für enum. | Bereichsregel gilt nicht für Makro. |
Die standardmäßige Enum-Wertzuweisung erfolgt automatisch. Enum ist sehr hilfreich bei der Definition einer großen Anzahl von Konstanten. Der Compiler verwendet die standardmäßige Konstantenwertinitialisierung. | Die Makrokonstantenwerte müssen vom Programmierer immer explizit erwähnt werden. Dies kann bei einer großen Anzahl von Konstanten ein mühsamer Prozess sein, da der Programmierer beim Definieren des Makros immer jeden Konstantenwert manuell definieren muss. |
Fazit
Das Enum-Programm in C könnte als optionale Methode für eigenständige Programme oder kleine Projekte angesehen werden, da Programmierer immer Makros anstelle einer Enum verwenden können. Erfahrene Programmierer neigen jedoch dazu, bei umfangreichen Softwareentwicklungsprojekten Enumerationen vor Makros zu verwenden. Dies hilft beim Schreiben sauberer und lesbarer Programme.