C 열거형(Enumerated Type)

프로그래밍/C 2019.05.24 20:09

열거형(Enumerated Type)

열거형은 숫자보다 문자가 더 친근한 우리들을 위해 존재합니다.

마치 인터넷 URL 입력해서 접속할 때 아이피 대신 도메인을 입력해서 들어가듯 C언어에서도 같은 이유로 존재합니다.

 

정의와 선언

열거형으로 Result이라는 이름의 자료형을 정의한다는 것은 다음의 의미를 지닙니다.

Result형 변수에 저장이 가능한 정수 값들을 결정하겠다

enum Result
{
    Success=1,
        Fail=2,
};

이렇게 됩니다.

Success = 1는 Success를 정수 1을 의미하는 상수로 정의합니다.

그리고 이 값은 Result형 변수에 저장이 가능합니다.

정의할 때 결정되는 값

정의할 때 결정되는 값은 아무것도 쓰지 않으면 0부터 시작됩니다.

또한 첫번째 값에 따라 나머지 값들이 결정되기도 합니다.

enum Result {
       Success,
       Fail,
};

이때 Success와 Fail이 가지고 있는 값은 각각 0,1이 됩니다.

enum Result {
       Success = 1,
       Fail,
};

위와 같이 정의되었다면 Fail 값은 2가 됩니다.

어디에 쓰이는가

예시를 하나 들어보겠습니다.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
enum Result {
       Success = 1,
       Fail = 0,
};
enum Result Print(const char * str) {
       if (strlen(str) == 0) {
              return Fail;
       }
       printf("%s", str);
       return Success;
}
int main(void) {
       enum Result result = Print("");
       printf("%d", result);
}

문자열 길이가 0이면 실패, 1 이상이면 성공을 반환하는 함수를 정의하였습니다.

0,1로 반환해도 좋지만,역시나 사람은 숫자보단 문자가 친근합니다.

함수의 크기가 커져서 반환할 수 있는 값들이 많아진다면 0,1,2,3,4 이렇게 숫자를 부여하기보다는 열거형을 하나 만들어서 반환하는 게 나중에 함수 이해하기도 쉽습니다.

또한 열거형은 switch문과 함께 사용도 가능합니다.

enum Result result = Print("");
       switch (result) {
       case Success:
              printf("1");
              break;
       case Fail:
              printf("0");
              break;
       }

'프로그래밍 > C' 카테고리의 다른 글

C 선행처리기와 매크로  (0) 2019.05.26
C 메모리 구조와 동적 할당  (0) 2019.05.25
C 열거형(Enumerated Type)  (0) 2019.05.24
typedef과 구조체  (0) 2019.05.23
C 구조체  (0) 2019.05.21
C 표준입출력과 버퍼와 스트림  (0) 2019.05.20

댓글을 달아 주세요