반응형
[ 열거형 ]
열거형은 정수형 상수에 이름을 붙여 코드를 이해하기 쉽게 해준다. 만약 여러개 정수형 상수를 선언한다면 두세 개까지는 괜찮지만 개수가 많아지면 귀찮아 질 것이다. 열거형을 사용하면 정수형 상수를 좀 더 편하게 정의할 수 있다.
enum 열거형이름{
value1 = 초깃값,
value2,
value3
};
열거형은 정의로만 사용이 안되고 변수로 선언해서 사용해야 한다.
enum 열거형이름 변수이름;
#include <stdio.h>
enum DayOfWeek{ // 열거형 정의
Sunday = 0; // 초깃값 할당
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday
};
int main(){
enum DayOfWeek week; // 열거형 변수 선언
week = Tuesday; // 열거형 값 할당
printf("%d\n", week); // 2. Tuesday의 값 출력
return 0;
}
# 실행 결과
2
- 열거형의 값은 처음에만 할당해주면 그 아래에 오는 값들은 1씩 증가하면서 자동으로 할당된다. ( 아무 값도 할당하지 않으면 0부터 시작) 따라서 처음에 오는 Sunday에 0을 할당하면 Monday는 1, Tudesday는 2, ...
- 문법으로 정해진 규칙은 아니지만 열거형 이름이나 값을 정의할 때 대문자만 사용하는 경우가 많다. 특히 단어와 단어 사이에는
_
를 주로 사용한다. 사실 같은 C언어 코드라 하더라도 운영체제, 회사, 단체에 따라 스타일이 제각각이기때문에 해당 환경에서 사용하는 스타일에 맞춰주자. - 보통은 처음에 오는 값에만 초깃값을 할당하지만, 모든 값에 정수를 할당할 수 있다.
enum Value{
ValueA = 1,
ValueB = 3,
ValueC = 7,
ValueD = 11
};
- 열거형도
typedef
로 별칭을 지정하고 익명 열거형을 정의할 수 있다.
typedef enum _DayOfWeek{ // 열거형 이름은 _DayOfWeek
Sunday = 0;
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday
} DayOfWeek; // typedef를 사용하여 열거형 별칭을 DayOfWeek로 정의
- 익명 열거형도 가능하다. ( 구조체와 같은 방식~ )
- 열거형을 정의하는 동시에 변수 선언
enum DayOfWeek{
Sunday = 0;
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday
} week; // 열거형을 정의함과 동시에 변수 week 선언
열거형을 switch에 활용하기
열거형은 switch
분기문을 사용할 때 유용하다
switch(열거형 변수){
case 열거형 값:
실행할 코드;
break;
}
예를들어 게임을 만든다고 할 때 캐릭터의 스킬을 열거명으로 정의할 수 있다.
#include <stdio.h>
enum LuxSkill{
LightBinding = 1,
PrismaticBarrier,
LucentSingularity,
FinalSpark
};
int main(){
enum LuxSkill skill; // 열거형 변수 선언
skill = LightBinding; // 열거형 값 할당
switch(skill){
case LightBinding:
printf("LightBinding"\n);
break;
case PrismaticBarrier:
printf("LightBinding"\n);
break;
case LightBinding:
printf("LucentSingularity"\n);
break;
case LightBinding:
printf("iInalSpark"\n);
break;
default:
break;
}
}
열거형을 for에 활용하기
열거형을 정의한 뒤 for문에 활용하는 방법도 있다. 예를 들어 프로그램에서 일요일부터 토요일까지 매일 반복되는 알람을 설정한다면 열거형과 반복문을 사용하면 편리하다.
#include <stdio.h>
typedef enum _DayOfWeek{
Sunday = 0,
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday,
DayOfWeekCount // 열거형 값의 개수를 나타내는 항목 추가
} DayOfWeek; // typedef를 사용하여 열거형 별칭을 DayOfWeek로 정의
int main(){
// 초깃값은 Sunday, i가 DayOfWeekCount보다 작을 때까지만 반복
for(DayOfWeek i = Sunday; i<DayOfWeekCount; i++){
printf("%d\n", i);
}
return 0;
}
# 실행 결과
0
1
2
3
4
5
6
반응형
'프로그래밍 언어 > [ C ]' 카테고리의 다른 글
[ C ] 09. 전처리기 ( if, ifdef, elif, ifndef, define, endif ) (0) | 2020.08.14 |
---|---|
[ C ] 08. 구조체 (0) | 2020.08.13 |
[ C ] 06. 포인터연산 (0) | 2020.08.13 |
[ C ] 05. 메모리와 포인터의 사용 (0) | 2020.08.13 |
[ C ] 04. 포인터의 형변환 (0) | 2020.08.13 |