Jiyong's STUDY

열거형 enum의 정의, 설명 본문

프로그래밍/C

열거형 enum의 정의, 설명

Kingjiyong 2018. 5. 25. 02:57

변수에 저장 가능한 정수를 나열하는 열거형


열거형은 enum으로 정의한다.


열거형의 정의 방법은


enum charnum {

A=1, B=2, C=3

};


와 같은 방법으로 정의가 가능하다.


그리고 선언 방법은,


enum charnum ABC;


와 같은 방법을 선언한다.


열거형 또한 typedef 선언을 통한 정의가 가능한데,


typedef enum {

A=1, B=2, C=3

} charnum;


typedef enum charnum {

A=1, B=2, C=3

} Charnum;


와 같이 구조체, 공용체와 typedef 선언을 통한 정의의 방법은 비슷하다.


예제를 보자.


typedef enum {

A=1, B=2, C=3

} charnum;


int main() {

char num=0;

scanf("%d", &num);


swtich(num) {

case A:

puts("A 입력됨");

break;

case B:

puts("B 입력됨");

break;

case C:

puts("C 입력됨");

break;

}

}


1 입력시 case A, 2 입력시 case B, 3 입력시 case C의 결과가 출력된다.

case 'A'도 아니고 case A다. 즉 char에 A가 있다고 case A의 결과가 나오는 것이 아니다.


enum에서 A라는 상수에 1이라는 값을 저장했는데, 무슨 의미냐면

A라는 문자가 아닌 상수는 정수 1을 의미하게 된다는 것이다.

A와 'A'는 다르다. A는 상수이지만, 'A'는 하나의 문자이다. 쉬운 내용이지만 이를 모른다면 혼동하기 쉬운 개념이다.


그리고 처음에 변수에 저장 가능한 정수를 나열하는 열거형이라고 했는데, 이는 무슨 의미인지 설명하면

charnum에서 보면 A=1, B=2, C=3. 3개의 상수에 각각 1, 2, 3이라는 정수가 대입이 되어있다.

즉, enum charnum에는 1, 2, 3이라는 정수가 대입이 가능하다는 의미이다.


만약 열거형을 정의할 때, 상수에 정수를 대입하지 않는다면 어떻게 될까?

또한 어떠한 상수에만 정수를 대입하면 어떻게 될까?


typedef enum {

A,B,C=6,D,E

} charnum;


이러한 경우에는 자동으로 첫 번째는 0으로 지정되며 그 다음 상수들은 1씩 증가하게 된다.

또한 중간에 어떠한 상수에만 정수가 저장되어 있다면 그 상수 뒤의 상수는 저장된 정수에서부터 1씩 증가되어 지정된다.


즉 이 정의는


typedef enum {

A=0, B=1, C=6, D=7, E=8

} charnum;


와 같은 정의이다.


그리고 변수 선언이 아닌 단순히 상수에 정수를 저장하기 위한 enum 정의의 경우에는


enum {A,B,C,D,E};


로 간단하게 정의가 가능하다. 단 변수로서의 기능은 빠지게 된다.