-
구조체(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;
참고
'Programming Language > c,c++' 카테고리의 다른 글
1 << 31 (0) 2023.03.28