Usa l'enumerazione typedef in C

Jinku Hu 12 ottobre 2023
  1. Usa enum per definire costanti intere con nome in C
  2. Usa typedef enum per definire il tipo personalizzato per oggetti contenenti costanti intere denominate
Usa l'enumerazione typedef in C

Questo articolo mostrerà diversi metodi su come usare typedef enum in C.

Usa enum per definire costanti intere con nome in C

La parola chiave enum definisce un tipo speciale chiamato enumerazione. Le enumerazioni sono fondamentalmente solo valori integrali che hanno nomi come variabili ma sono oggetti di sola lettura e non possono essere modificati in fase di esecuzione.

Ci sono due modi per costruire un oggetto enum; uno è dichiarare ogni membro senza assegnare un valore esplicito ma valori dedotti automaticamente in base alla posizione; l’altro è dichiarare i membri e assegnare i valori espliciti.

Nell’esempio seguente, assegniamo valori personalizzati a ciascuno di essi e denominiamo l’oggetto - STATE. Successivamente, possiamo usare i nomi dei membri dell’oggetto STATE nel codice come interi con segno e valutarli nelle espressioni. Il codice di esempio seguente mostra le istruzioni condizionali multiple che controllano se il numero intero di input è uguale alla costante definita e stampa la stringa adatta corrispondente una volta che viene trovata.

#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);
}

Produzione:

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

Usa typedef enum per definire il tipo personalizzato per oggetti contenenti costanti intere denominate

La parola chiave typedef viene utilizzata per denominare gli oggetti definiti dall’utente. Le strutture spesso devono essere dichiarate più volte nel codice. Senza definirle usando typedef ogni dichiarazione dovrebbe iniziare con la parola chiave struct / enum, che rende il codice abbastanza sovraccarico per la leggibilità.

Nota però, typedef crea semplicemente un nuovo nome alias per il tipo dato piuttosto che crearne uno nuovo. Molti tipi interi come size_t, uint e altri sono solo typedef di altri tipi incorporati. Pertanto, l’utente può dichiarare più alias di nome per i tipi incorporati e quindi concatenare dichiarazioni aggiuntive typedef utilizzando alias già creati.

#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);
}

Produzione:

Please provide integer in range [1-4]: 2
Machine is stopped
Autore: 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