在 C 語言中使用 typedef enum

Jinku Hu 2023年10月12日
  1. 使用 enum 在 C 語言中定義命名整數常量
  2. 使用 typedef enum 定義包含命名整數常量的物件的定製型別
在 C 語言中使用 typedef enum

本文將演示關於如何在 C 語言中使用 typedef enum 的多種方法。

使用 enum 在 C 語言中定義命名整數常量

enum 關鍵字定義了一種叫做列舉的特殊型別。列舉基本上只是整數值,其名稱為變數,但卻是隻讀物件,在執行時不能修改。

構造一個列舉物件有兩種方法,一種是宣告每個成員,不分配顯式值,而是根據位置自動推導值;另一種是宣告成員,分配顯式值。

在下面的例子中,我們為每個成員分配自定義值,並將物件命名為-STATE。接下來,我們就可以在程式碼中把 STATE 物件的成員名作為有符號整數,並在表示式中對其進行評估。下面的示例程式碼演示了多個條件語句,檢查輸入的整數是否等於定義的常量,一旦匹配,就列印出相應的合適的字串。

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

輸出:

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

使用 typedef enum 定義包含命名整數常量的物件的定製型別

typedef 關鍵字用於命名使用者定義的物件。在程式碼中經常需要多次宣告結構。如果不使用 typedef 來定義它們,每次宣告都需要以 struct/enum 關鍵字開始,這就使得程式碼的可讀性變得很重。

但請注意,typedef 只是為給定型別建立一個新的別名,而不是建立一個新的型別。許多整數型別如 size_tuint 等只是其他內建型別的 typedef。因此,使用者可以為內建型別宣告多個別名,然後使用已經建立的別名來鏈式宣告額外的 typedef

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

輸出:

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

DelftStack.com 創辦人。Jinku 在機器人和汽車行業工作了8多年。他在自動測試、遠端測試及從耐久性測試中創建報告時磨練了自己的程式設計技能。他擁有電氣/ 電子工程背景,但他也擴展了自己的興趣到嵌入式電子、嵌入式程式設計以及前端和後端程式設計。

LinkedIn Facebook