Verwendung von typedef enum in C

Jinku Hu 12 Oktober 2023
  1. Benutzen Sie enum, um benannte Integer-Konstanten in C zu definieren
  2. Verwendung von typedef enum zum Definieren des Typs für ein Objekt, das benannte Integer-Konstanten enthält
Verwendung von typedef enum in C

Dieser Artikel demonstriert mehrere Methoden zur Verwendung von typedef enum in C.

Benutzen Sie enum, um benannte Integer-Konstanten in C zu definieren

Das Schlüsselwort enum definiert einen speziellen Typ namens Aufzählung. Aufzählungen sind im Grunde nur ganzzahlige Werte, die Namen wie Variablen haben, aber schreibgeschützte Objekte sind und zur Laufzeit nicht verändert werden können.

Es gibt zwei Möglichkeiten, ein enum-Objekt zu konstruieren; eine ist, jedes Mitglied zu deklarieren, ohne einen expliziten Wert zuzuweisen, sondern automatisch Werte auf der Basis der Position abzuleiten; die andere ist, die Mitglieder zu deklarieren und die expliziten Werte zuzuweisen.

Im folgenden Beispiel weisen wir jedem dieser Mitglieder einen eigenen Wert zu und benennen das Objekt - STATE. Als Nächstes können wir die Member-Namen des STATE-Objekts im Code als vorzeichenbehaftete Ganzzahlen verwenden und sie in Ausdrücken auswerten. Der folgende Beispielcode demonstriert die mehrfachen bedingten Anweisungen, die prüfen, ob die eingegebene Ganzzahl gleich der definierten Konstante ist und die entsprechende passende Zeichenkette ausgeben, sobald sie übereinstimmt.

#include <stdio.h>
#include <stdlib.h>

enum STATE { RUNNING = 49, STOPPED = 50, FAILED = 51, HIBERNATING = 52 };

int main(void) {
  int input1;

  printf("Please provide integer in range [1-4]: ");
  input1 = getchar();

  if (input1 == STOPPED) {
    printf("Machine is stopped\n");
  } else if (input1 == RUNNING) {
    printf("Machine is running\n");
  } else if (input1 == FAILED) {
    printf("Machine is in failed state\n");
  } else if (input1 == HIBERNATING) {
    printf("Machine is hibernated\n");
  }

  exit(EXIT_SUCCESS);
}

Ausgabe:

Please provide integer in range [1-4]: 2
Machine is stopped

Verwendung von typedef enum zum Definieren des Typs für ein Objekt, das benannte Integer-Konstanten enthält

Das Schlüsselwort typedef wird verwendet, um benutzerdefinierte Objekte zu benennen. Strukturen müssen im Code oft mehrfach deklariert werden. Ohne die Definition mit typedef müsste jede Deklaration mit dem Schlüsselwort struct/enum beginnen, was den Code für die Lesbarkeit ziemlich überladen macht.

Beachten Sie jedoch, dass typedef lediglich einen neuen Alias-Namen für den angegebenen Typ erzeugt, anstatt einen neuen Typ zu erstellen. Viele Integer-Typen wie size_t, uint und andere sind nur typedef von anderen eingebauten Typen. Der Anwender kann also mehrere Namens-Aliase für eingebaute Typen deklarieren und dann weitere typedef-Deklarationen unter Verwendung bereits erstellter Aliase verketten.

#include <stdio.h>
#include <stdlib.h>

typedef enum {
  RUNNING = 49,
  STOPPED = 50,
  FAILED = 51,
  HIBERNATING = 52
} MACHINE_STATE;

int main(void) {
  int input1;
  MACHINE_STATE state;

  printf("Please provide integer in range [1-4]: ");
  input1 = getchar();
  state = input1;

  switch (state) {
    case RUNNING:
      printf("Machine is running\n");
      break;
    case STOPPED:
      printf("Machine is stopped\n");
      break;
    case FAILED:
      printf("Machine is in failed state\n");
      break;
    case HIBERNATING:
      printf("Machine is hibernated\n");
      break;
    default:
      break;
  }

  exit(EXIT_SUCCESS);
}

Ausgabe:

Please provide integer in range [1-4]: 2
Machine is stopped
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook