C언어 사용자정의 자료형 열거형

    2018-02-08 03:19:45 작성

    열거형은 둘이상의 연관있는 이름을 상수로 정의하여 나열하는 자료형입니다.
    열거형의 유용함은 관련있는 심볼릭상수를 정의함으로써 코드의 가독성을 높이기 위함 입니다.

    열거형의 정의

    열거형은 enum 키워드를 사용하여 정의합니다.
    상수이기 때문에 값을 지정하지 않으면 첫번째 멤버는 자동으로 0으로 초기화되고 두번째 멤버는 1과 같이 다음 멤버는 이전의 멤버보다 1더 큰 값을 갖게 됩니다.

    enum day {
    	SUN, MON, TUE, WED, THU, PRI, SAT
    };

    위의 예제는 값을 지정하지 않았음으로 SUN = 0 이되고 MON = 1, TUE = 2 이렇게 상수값을 갖게 됩니다.

    typedef enum  {
    	DO = 1001, RE, MI, PA, SOL, RA, SI
    } Syllable;

    위의 예제처럼 typedef를 사용할 수도 있으며, DO가 1001 값이므로 RE는 1002 값을 갖게 됩니다.


    열거형 변수 선언

    열거형 변수 선언방식은 구조체와 동일합니다.
    열거형 변수 선언을 하면 열거형 변수는 열거형 멤버의 값만 저장할 수 있습니다.
    다음 예제는 switch문에 사용되는 case의 값을 문자화하여 코드의 가독성을 높입니다.

    #include <stdio.h>
    
    typedef enum _menu {
    	INSERT = 1, DELETE, SEARCH, EXIT
    } MENU;
    
    int main(void) {
    	MENU choice;
    	do {
    		printf("*** MENU ***\n");
    		puts("1. 생성");
    		puts("2. 삭제");
    		puts("3. 검색");
    		puts("4. 종료");
    		printf("선택하세요 : ");
    		scanf("%d", &choice);
    
    		switch (choice) {
    		case INSERT:
    			printf("생성 메뉴를 선택하였습니다.\n\n");
    			break;
    		case DELETE:
    			printf("삭제 메뉴를 선택하였습니다.\n\n");
    			break;
    		case SEARCH:
    			printf("검색 메뉴를 선택하였습니다.\n\n");
    			break;
    		case EXIT:
    			printf("종료 메뉴를 선택하였습니다.\n\n");
    			break;
    		}
    	} while (choice != EXIT);
    	printf("프로그램을 종료합니다.\n");
    	return 0;
    }