열거형(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;
}
댓글