기본개념.
#define A 0
#define B 1
#define C 2
A가 1이고 B가 2 C가 3으로 바뀌었다고 했을때, define이라면
하나씩 다 바꾸어주어야 겠지요. 하지만 enum 이라면
#define _NUMBER{A=1, B, C}
설명
enum(열거형)은 여러개의 상수를 기호로 선언할 수 있습니다.
형식
여기서 A와 B와 C는 컴파일러에서 상수 값으로 변환합니다. 한마디로 A,B,C는 상수입니다.
간단한 예제
void main( )
{
printf("%d %d %d\n", A, B, C );
}
- 0 1 2
값은 자동으로 0부터 정수 값을 갖습니다.
void main( )
{
printf("%d %d %d\n", A, B, C );
}
- 100 101 102
초기값을 주면 자동으로 1씩 증가하며 정수 값으로 상수화됩니다.
void main( )
{
printf("%d %d %d\n", A, B, C );
}
- 100 200 300
모든 초기화할 수 있습니다.
void main( )
{
enum MyEnum val;
val = A;
printf("%d\n", val);
}
- 100
enum의 이름을 사용하면 변수를 만들고 enum 상수(A,B,C) 를 저장하고 사용할 수 있습니다.
enum변수를 어디에 사용할까요?
자료형을 명확하게 하고자 할 때 사용합니다.
과일을 표현하는 자료가 있다고 할때 아래 예제를 보입니다.
enum Fruits { Orange, Apple, Banana };
void main( )
{
enum Fruits val;
val = Orange;
printf("%d\n", val);
}
- 0
출력결과는 0이지만 val이라는 변수는 명확히 과일을 저장하기 위한 변수이며 Orange를 저장하고 있다는 것을 알 수 있습니다. 간단한 예제에서야 사용할 필요를 느끼지 못하겠지만 큰 프로그램등에서는 유용하게 사용됩니다. 지금은 사용법만 정확히 아시면 됩니다.
아래는 과일을 출력하는 예제입니다.
void PrintFruits(enum Fruits fruit)
{
switch(fruit)
{
case Orange:
printf("오렌지입니다!\n");
break;
case Apple:
printf("사과입니다!\n");
break;
case Banana:
printf("바나나입니다!\n");
break;
default:
printf("과일이 ㅠ.ㅠ..\n");
}
};
void main( )
{
PrintFruits( Apple );
}
- 사과입니다!
void PrintFruits(enum Fruits fruit)에서 fruit이 과일(오렌지, 사과, 바나나 중 하나)이라는 것을 명확히 할 수 있습니다.
다른 사용예는 앞으로 예제들을 연습하며 공부하면 됩니다. 이 페이지에서는 사용법만 확실히 알아 두세요.
활용
// Parsing Variable
typedef struct parsing_variable {
enum {Header=0, Data, Terminator};
int nParsingStat;
enum {SystemMessageData=0, ResultData};
int nMessageType;
enum {SystemMessageStart=-1, SystemMessage=0};
int nSystemMessageParsingStat;
int nSystemMessage; // Received System Message
enum {ResultStart=-1, nCamNo=0, nGrabCmdCnt, nGrabStartFrame, nGrabNo, nAvg/*, cnt, index, cogX, cogY, size, type, val*/};
int nResultParsingStat;
int nResultCnt; // Result Count
CString strMessagePart;
} ParsVar;
이렇게 적어주면, 플래그를 활용할 때 편하게 사용할 수 있다.
m_parsVar.nParsingStat = nParsingStat.Header;
이렇게 넣어주고
if(m_parsVar.nParsingStat == m_parsVar.Header)
else if(m_parsVar.nParsingStat == m_parsVar.Terminator)