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
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