[C언어] 014. 공용체와 열거형, 비트필드

Posted on by pkchan

014-01 // UNION

UNION은 공용체입니다. 구조체와 모든 것이 같고, 메모리에 할당되는 구조가 다릅니다. 가장 큰 멤버 기준으로 메모리에 할당되며, 모든 멤버들이 공용으로 사용합니다.

union union_name {

          data_type member1;
          data_type member2;
          .
          .
          data_type member;

};

멤버들이 공용으로 메모리 영역을 사용하기 때문에 하나의 멤버 값만을 저장합니다. 첫 번째 멤버의 값이 대입되고, 두 번째 멤버의 값이 대입되면 첫 번째 멤버의 값은 지워집니다.

014-02 // ENUM

ENUM은 열거형입니다. 유니언과 함께 자주 쓰이지는 않지만 알아둘 필요는 있습니다. 코드를 짜다 보면 수를 대입시켜 특정 단어를 표현합니다. 예를 들면 남자는 1 여자는 2로 대입시켜 조건문에 사용할 때가 있습니다. 이런 상황에 숫자를 계속 사용하다 보면 코드가 길어질수록 헛갈리기 마련입니다. 문자를 문자 그대로 사용할 수 있도록 도와주는 것이 열거형입니다.

enum { word1, word2, word3 };

word1은 0으로 치환되며 순차적으로 word2는 1, word3는 2로 치환됩니다. enum { male = 3, female }; 과 같이 선언한다면 female은 4로 치환됩니다.
if ( gender == 3 ) 과 같이 쓰던것이 if ( gender == male ) 로 사용됩니다.

014-02 // BIT FIELDS STRUCTURE

비트 단위로 멤버를 구성하는 구조체로서 메모리 관리가 필요할때 사용하는 구조체입니다.

struct strycture_name {

          data_type member1 :3;
          data_type member2 :7;
          .
          .
          data_type member :3;

};

멤버를 정의할때 콜론과 사용할 비트수를 같이 정의해줍니다. 비트단위의 자료는 음수를 사용하지 않기때문에 양수만 사용하는 unsigned를 붙여서 선언합니다. 또한 자료형은 비트단위 메모리할당을 위한 기초 영역으로 사용됩니다. unsigned int 로 설정했다면 메모리에는 4bytes의 공간이 할당되고 그 안에서 각 멤버의 비트별로 나누어 할당됩니다. 대입되는 자료가 할당된 비트영역을 넘어가면 넘어가는 부분이 잘리거나 0으로 초기화됩니다.

댓글 남기기