happy coding
[c] 공용체와 열거체 본문
TCP school을 보고 정리한 내용입니다.
공용체(union)
공용체는 union 키워드를 사용해 선언하며, 한 가지를 제외한 모든 면에서 구조체와 같다. 그 한가지는 모든 멤버 변수가 하나의 메모리 공간을 공유한다는 점이다. 모든 멤버 변수가 같은 메모리를 공유하므로, 공용체는 한 번에 하나의 멤버 변수밖에 사용할 수 없다.
typedef union
{
unsigned char a;
unsigned short b;
unsigned int c;
} SHAREDATA;
int main(void)
{
SHAREDATA var;
var.c = 0x12345678;
printf("%x\n", var.a);
printf("%x\n", var.b);
printf("%x\n", var.c);
return 0;
}
공용체는 순서가 규칙적이지 않고, 미리 알 수 없는 다양한 타입의 데이터를 저장할 수 있도록 설계된 타입이다. 이러한 공용체는 크기가 가장 큰 멤버 변수의 크기로 메모리를 할당받는다. 따라서 공용체 배열을 사용하면, 같은 크기로 구성된 배열 요소에 다양한 크기의 데이터를 저장할 수 있다. 또한 공용체의 멤버 변수를 단 하나만 초기화해도, 나머지 멤버 변수들이 모두 같은 데이터를 공유한다.
열거체(enumerated types)
열거체는 새로운 타입을 선언하면서, 동시에 해당 타입이 가질 수 있는 정수형 상수값도 같이 명시할 수 있는 타입이다. 이러한 열거체를 이용하면 프로그램의 가독성이 높아지고, 변수가 지니는 값에 의미를 부여할 수도 있게 된다.
enum Weather {SUNNY = 0, CLOUD = 10, RAIN = 20, SNOW = 30};
int main(void)
{
enum Weather wt;
wt = SUNNY;
switch (wt)
{
case SUNNY:
puts("오늘은 햇볕이 쨍쨍!");
break;
case CLOUD:
puts("비가 올락말락하네요!");
break;
case RAIN:
puts("비가 내려요.. 우산 챙기세요!");
break;
case SNOW:
puts("오늘은 눈싸움하는 날!");
break;
default: puts("도대체 무슨 날씨인건가요!!!");
}
puts("각각의 열거체에 해당하는 정수값은 다음과 같습니다.");
printf("%d %d %d %d\n", SUNNY, CLOUD, RAIN, SNOW);
return 0;
}
C언어에서 열거체는 enum 키워드를 사용해 선언한다. 위 코드처럼 사용자가 별도로 각 멤버에 해당하는 상숫값을 명시할 수 있다. 이때 상수값을 따로 명시하지 않으며 0부터 시작되며, 그 다음 멤버의 값은 바로 앞 멤버의 값보다 1만큼 증가되며 정의된다.
'self study > 언어의 기본부터' 카테고리의 다른 글
[c] 파일 입출력 (0) | 2022.11.27 |
---|---|
[c] 콘솔 입출력 (0) | 2022.11.27 |
[c] 구조체의 활용 (0) | 2022.11.27 |
[c] 포인터와 구조체 (0) | 2022.11.26 |
[c] 구조체의 기본 (0) | 2022.11.26 |
Comments