ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 구조체(struct), 공용체(union), 열거체(enum) 차이
    Programming Language/c,c++ 2020. 10. 26. 14:01

    struct와 union

     

    typedef struct{ // 구조체 정의
    	char x,
        short y,
        int z
    }STRUCT;
    
    
    typedef union{  // 공용체 정의
    	char x,
        short y,
        int z
    }UNION;

    STRUCT의 사이즈는 7, UNION의 사이즈는 4

     

     

    struct는 각각의 변수가 사이즈를 차지하는만큼 메모리 할당

    union은 가장 큰 변수 사이즈 만큼만 메모리 할당되고, 나머지 변수들은 앞에서 부터 메모리를 공유한다.

    union의 x,y,z의 주소값은 동일하다.

     

    UNION uni;
    uni.x=20;
    printf("%d %d %d\n", uni.x, uni.y, uni.z); 
    // 실행값 20 -13292 -858993644
    
    uni.y=40;
    printf("%d %d %d\n", uni.x, uni.y, uni.z); 
    // 실행값 40 40 -859045848
    
    uni.x=80;
    printf("%d %d %d\n", uni.x, uni.y, uni.z); 
    // 실행값 80 80 80
    

     

     

     

    enum

     

     

     = 서로 관련있는 상수들의 집합을 표현하기 위해 열거형을 사용

    // 나쁜 코드 예
    	
    	// webcolors.h (3rd party header)
        #define RED   0xFF0000
        #define GREEN 0x00FF00
        #define BLUE  0x0000FF
    
        // productinfo.h
        // 여기서는 제품의 색에 따른 보조 타입을 정의한다
        #define RED    0
        #define PURPLE 1
        #define BLUE   2
    
        int webby = BLUE;   // webby == 2; 엉뚱한 값이 사용된다
        
     //enum을 활용한 예
     
         enum class Web_color {
                red     = 0xFF0000,
                green   = 0x00FF00,
                blue    = 0x0000FF
            };
    
        enum class Product_info {
                red     = 0,
                purple  = 1,
                blue    = 2
            };
    
        int       webby = blue;   // 에러: enum class를 명시해야한다
        Web_color webby = Web_color::blue;

     

     

     

    참고

    www.cppkorea.org/CppCoreGuidelines/Enum/

    'Programming Language > c,c++' 카테고리의 다른 글

    1 << 31  (0) 2023.03.28
Designed by Tistory.