본문 바로가기

C & C++

C/C++ 기초 - 열거체 ( Enumeration ), 공용체 ( Union )

열거체


#include <iostream>

enum Number
{
	One = 1,
	Two,
	Three,
	Four,
	Five,
	Six,
	Seven,
	Eight,
	Nine,
	Zero = 0
};

int main(void)
{
	int a = One;
	int b = Eight;
	int c = Zero;

	printf("a : %d / b : %d / c : %d", a, b, c); // 결과 1, 8, 0

	return 0;
}

 '열거체'는 상수 값을 가지는 식별자입니다. 값이 정의되지 않으면 0부터 시작해서 1씩 증가하며 값이 정해지고, 값이 정의가 되었다면 정의된 값 이후부터 1씩 증가하게 됩니다.

 예시에서 처음에 1로 정의하였기 때문에 1부터 9까지 증가하면서 값이 정의되었고, Zero에서 0을 정의하여 Zero는 0이 되었습니다. 여기서 Zero 다음에 식별자가 추가된다면 그 식별자는 1이 되겠죠. 위에서 One이 1이 된 것과는 상관없이 값은 중복될 수 있습니다.

 열거체는 주로 Type을 나눌 때 사용합니다. 예를 들어 10대는 0, 20대는 1, 30대는 2, ... 이와 같이 컴퓨터는 숫자로 구분하는데 사람이 볼 때 숫자가 아니라 문자로 구분되어 알아보기 쉽게 하기 위함입니다.

 


공용체


#include <iostream>

union My_union
{
	char a;
	short b;
	int c;
};

int main(void)
{
	My_union u;

	u.c = 0x7fffffff;

	printf("a : %d / b : %d / c : %d", u.a, u.b, u.c); // 결과 -1, -1, 2147483647

	return 0;
}

 '공용체'는 여러 변수들이 메모리 공간을 공유하는 형식입니다. 메모리 크기가 가장 큰 변수를 기준으로 메모리 공간이 할당되고, 메모리 공간에 들어있는 값을 모든 변수들이 사용할 수 있습니다.

 예시 코드에서 c에만 int의 최대값을 넣었지만, 다른 변수들에도 -1 값, 즉 1111 1111, 1111 1111 1111 1111 bit를 읽어온 것을 알 수 있습니다.