C언어

C언어 Enum {1,2,3};

거부 2021. 8. 28. 17:56

1. enum

상수화 선언.

구조체인데, 알파벳 요소를 멤버변수로 받으면 숫자로 저장하는 구조체라고 생각하면 편함

 

2. 특징

1) 별도 초기화 없을 시 시작부터 0,1,2,3을 대입

2) 초기화 있을 시 해당 숫자부터 규칙적으로 대입

3) 불규칙적 숫자 대입 원하면 모든 변수에 직접 초기화해주면 됨

 

[코드 1]

#include <stdio.h>

enum alphabet_set {
	a,
	b,
	c,
	d,
	e
}alph;

void main() {
	enum alph num_1, num_2, num_3;
	num_1 = a;
	num_2 = b;
	num_3 = c;
	printf("a는 %d, b는 %d, c는 %d", num_1, num_2, num_3);
	

	return 0;
}

[출력 결과]

a는 0, b는 1, c는 2

 

[코드 2]

#include <stdio.h>

enum alphabet_set {
a,
b,
c,
d,
e
}alph;

void main() {
enum alph num_1, num_2, num_3;
num_1 = a;
num_2 = a;
num_3 = a;
printf("a는 %d, b는 %d, c는 %d", num_1, num_2, num_3);

return 0;
}

 

처럼 모두 a를 대입해도 괜찮음. 우리가 설정한 변수니까!!

 

[코드 3]

#include <stdio.h>

enum alphabet_set {
	a,
	b,
	c,
	d,
	e
}alph;

typedef enum {
	a2=5,
	b2,
	c2,
	d2,
	e2=5
}alphbet_set2;

void main() {
	enum alph num_1, num_2;
	alphbet_set2 num_3;
	num_1 = a;
	num_2 = b;
	num_3 = e2;
	printf("a는 %d, b는 %d, c는 %d", num_1, num_2, num_3);
	

	return 0;
}

 

[결과]

a는 0, b는 1, c는 5

 

[설명]

1. typedef

우리는 enum을 alphabet_set 라는 enum명으로 선언하고, 이 enum형 구조체 alphabet_Set의 변수명을 alph 라고 지어주었기때문에 main 에서는 enum 형 변수인 alph 를 통해 a,b,c,d,e를 불러올 수 있는 상황이 됨

이때 main에서 enum alph 처럼 자료형과 자료형으로 선언한 모임의 이름을 모두 적어주기 귀찮을 때 typedef 사용

 

typedef enum{} 이름; 을 하게 되면 앞으로 enum형으로 선언한 이 모임은 enum 포함해서 이 이름으로 부르겠다는 뜻임. 그래서 그 안의 변수 활용할 공간 num_3 선언시에도 이름만 적어주면 됨

 

2. 초기화

원래 enum 안의 변수명이 뭐든간에 첫 요소부터 1,2,3,4,5인데

만일 alphbet_set2 안에서처럼 처음 a2=5로 지정해주면 5,6,7,8,9로 여전히 일정한 차이를 두고 숫자가 대입됨

따라서 e2=5처럼 하나씩 지정해주면 지정값을 특정 멤버변수 안에 넣어줄수있음!