C에서 typedef enum 형 사용

Jinku Hu 2023년10월12일
  1. enum을 사용하여 C에서 명명 된 정수 상수 정의
  2. typedef enum을 사용하여 명명 된 정수 상수를 포함하는 객체에 대한 사용자 정의 유형 정의
C에서 typedef enum 형 사용

이 기사는 C에서typedef enum을 사용하는 방법에 대한 여러 방법을 보여줍니다.

enum을 사용하여 C에서 명명 된 정수 상수 정의

enum 키워드는 열거라는 특수 유형을 정의합니다. 열거 형은 기본적으로 이름을 변수로 사용하지만 읽기 전용 개체이며 런타임에 수정할 수없는 정수 값입니다.

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_t,uint 등과 같은 많은 정수 유형은 다른 내장 유형의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

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