자료실/C언어

C언어 - 열거형

자료수집중 2020. 7. 2.
반응형

열거형(enumeration)은 정수형 상수를 사용하기 편하게 이름을 부여해서 나열해 놓은 자료형입니다.

 

보통 변수를 상수로 만들기 위해서는 const를 자료형 앞에 붙여줍니다,

const int num = 0;

하지만 선언할 양이 점점 많아지면 관리하기가 힘들어집니다.

이때 열거형을 사용합니다

열거형은 enum 키워드를 사용합니다.
열거형을 정의하는 방법은 다음과 같습니다.

enum 열거형이름 {
    상수1,
    상수2,
    상수3,
    .
    .
    .
    
};

구조체나 공용체랑 다르게 자료형 없이 정의해야 합니다.

 

열거형도 사용하기 위해서는 구조체나 공용체 처럼 변수로 선언해야 합니다.

enum 열거형이름 변수이름;

정의하고 바로 변수 선언도 가능합니다.

enum 열거형이름 {
    상수1,
    상수2,
    상수3,
    .
    .
    .
    
} 변수이름;

 

열거형은 상수들에 값을 넣지 않으면 처음 상수(위)에서 0으로 시작해서 1씩 커지면서 값이 자동으로 입력됩니다.

*열거형의 정의에서 멤버상수들은 단순하게 상수로 사용이 가능합니다.

 이걸 이용해서 swith나 for문등의 조건에도 많이 사용합니다.

 단 함수안에 상수와 같은 이름의 변수를 사용하면 열거형을 변수 선언하고 사용해야 합니다.

#include <stdio.h>

enum en_1 {
	num1,
	num2,
	num3,
	num4,
};
int main(void) {

	printf("num1 = %d \n", num1);
	printf("num2 = %d \n", num2);
	printf("num3 = %d \n", num3);
	printf("num4 = %d \n", num4);

	return 0;
}

결과를 보면 자동으로 0부터 1씩 증가하며 입력된 모습을 볼 수 있습니다.

 

만약 중간중간에만 값을 지정하면 지정하지 않은 곳도 같은 방식으로 값이 정해집니다.

#include <stdio.h>


enum en_1 {
    num1=2, num2, num3, num4, num5=13, num6, num7, num8,

};
int main(void) {

    printf("num1 = %d \n", num1);
    printf("num2 = %d \n", num2);
    printf("num3 = %d \n", num3);
    printf("num4 = %d \n", num4);
    printf("num4 = %d \n", num5);
    printf("num4 = %d \n", num6);
    printf("num4 = %d \n", num7);
    printf("num4 = %d \n", num8);
    return 0;
}

결과를 보면 중간중간에만 값을 입력하면 값이 정해지지 않은 상수들은 값이 지정된 상수에서1씩 증가해서 자동으로 채워집니다.

 

열거형 변수는 열거형을 정의할때 선언한 멤버상수들만 값으로 받을 수 있습니다.

#include <stdio.h>

enum color {
    RED, GREEN, BLUE, PINK, YELLOW, WHITE, BLACK 
};
char *color_name[] = { "red", "green", "blue", "pink", "yellow", "white", "black" };
int main(void) {

    enum color col;
    col = BLUE;
    printf("오늘의 색깔은  = %s \n", color_name[col]);
	
	return 0;
}

 

*열거형 변수에 일반 정수도 입력 가능하고 컴파일시 에러도 발생하지 않지만 이런 식으로 사용하지 않는 걸   추천드립니다.

'자료실 > C언어' 카테고리의 다른 글

C언어 - 포인터와 다중 포인터  (0) 2020.07.03
C언어 - typedef  (0) 2020.07.02
C언어 - 공용체  (0) 2020.07.01
C언어 - 문자열 변환  (0) 2020.06.30
C언어 - 문자,문자열의 입력, 출력  (0) 2020.06.30

댓글