happy coding

[c] 공용체와 열거체 본문

self study/언어의 기본부터

[c] 공용체와 열거체

yeoonii 2022. 11. 27. 00:53
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