열거형, 공용체

열거형은 이름을 갖는 정수형의 상수를 정의하여 프로그램을 이해하기 쉽게 해준다. 열거형은 예약어 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바이트를 사용하므로 이런 결과가 나온