강좌 & 팁
열거형, 공용체
열거형은 이름을 갖는 정수형의 상수를 정의하여 프로그램을 이해하기 쉽게 해준다. 열거형은 예약어 enum을 사용하여 정의하며, 형은 다음과 같다.
enum type_name {열거리스트};
다음의 예제를 통해 확인하여 보자
#include <stdio.h>
enum SCB
{
ONE=100,
//ONE,
TWO,
THR=10,
FOU,
};
int main()
{
//int A3;
enum SCB A1;
enum SCB A2;
enum SCB A3;
enum SCB A4;
A1=ONE;
A2=TWO;
//A3=A2;
A3=THR;
A4=FOU;
printf("A1:%d\nA2:%d \n",A1,A2);
printf("A3:%d\nA4:%d \n",A3,A4);
return 0;
}
enum(열거형)은
#define ONE 100
#define TWO 101
과 같은 효과를 가진다.
위의 소스를 화면에 출력해보면A1: 100
A2: 101
A3: 10
A4: 11
로 나온다.
다음소스는 열거형을 이용해서 항상 출석부 전체를 출력하는 프로그램이다.
#include <stdio.h>
enum SCB
{
KANG,
KIM,
BONG,
YONG,
NAM,
KUK,
END
};
char name[][5]={"KANG","KIM","BONG","YONG","NAM","KUK",""};
int main()
{
int iCnt;
for(iCnt=0;iCnt<END;++iCnt)
{
printf("%d : %s\n",iCnt+1,name[iCnt]);
}
printf("번호를 입력하세요\n");
scanf("%d",&iCnt);
printf("%d : %s\n",iCnt,name[iCnt-1]);
return 0;
}
공용체는 선언이나 사용법이 구조체와 유사하지만 자료형이 다른 멤버들이 같은 메모리를 공유한다는 점이 다르다.
다음의 예제를 통해 확인하여 보자
#include <stdio.h>
union SCB
{
unsigned int A;
unsigned short B;
unsigned char C;
};
int main()
{
union SCB Val;
Val.A = 0x12345678;
printf("%X\n",Val.A);
printf("%X\n",Val.B);
printf("%X\n",Val.C);
return 0;
}
출력은
A: 12345678
B: 5678
C: 78
이 된다.
A는 int형이므로 주어진 4바이트를 모두 사용하고, short형은 상위 2바이트, char형은 상위 1바이트를 사용하므로 이런 결과가 나온다