묻공러
[C] 열거형과 공용체
묻공러
묻지마공부
묻공러
전체
오늘
어제
  • 분류 전체보기 (487)
    • C (54)
      • [코드조선] C 핵심 (35)
      • [언어본색] C 기초 (19)
    • C++ (72)
      • [루키스] C++ (9)
      • [루키스] 콜백함수 (6)
      • [루키스] STL (8)
      • [루키스] Modern C++ (11)
      • [노코프] C++ (10)
      • [노코프] Tips (16)
      • [일지] C++ (12)
    • 자료구조 & 알고리즘 (50)
      • [코드조선] C 자료구조 & 알고리즘 (6)
      • [합격자되기] C++ 코딩테스트 (12)
      • [루키스] C++ 자료구조 & 알고리즘 (32)
    • CS (69)
      • [널널한 개발자] CS 개론 (19)
      • [혼자 공부하는] 컴퓨터 구조 (16)
      • [혼자 공부하는] 운영체제 (18)
      • [널널한 개발자] 네트워크 (16)
    • 게임 그래픽스 (46)
      • [전북대] OpenGL (25)
      • [일지] DirectX (21)
    • 게임 엔진 (124)
      • [코드조선] 언리얼 (53)
      • [코드조선] 언리얼 데디서버 (8)
      • [일지] 언리얼 (59)
      • [일지] 언리얼 (2) (3)
      • 유니티 (1)
    • 게임 서버 (17)
    • 게임 수학 & 물리 (19)
      • 게임 수학 (12)
      • 게임 물리 (7)
    • GIT & GITHUB (4)
    • 영어 (18)
      • [The Outfit] 대본 공부 (11)
      • the others (7)
    • 그 외 (14)
      • In (5)
      • Out (5)
      • Review (4)

인기 글

최근 글

hELLO · Designed By 정상우.
C/[코드조선] C 핵심

[C] 열거형과 공용체

2024. 2. 15. 12:00

열거형(Enummeration)
매크로 상수와 유사하며

비슷한 종류의 매크로 상수를 여러 개를 동시에 정의하는 것이다
문자열이나 int를 직접적으로 사용하는 것은 가독성에 좋지 않아서

열거형을 사용한다

enum ASCII 
{
    ASCII_A = 65,
    ASCII_B,
    ASCII_C,
    ASCII_D
};



열거형 vs. 매크로 상수
매크로 상수는 디버깅에 취약하다

전처리기 단계에서 매크로 상수가 모두 값으로 치환되어 버리기 때문이다
반면에, 열거형은 상수로 치환되지 않고 변수명 그대로 디버깅이 가능하다
또한, 열거형은 메모리를 차지하지 않으면서 동시에 디버깅까지 가능하기 때문에

매크로 상수보다는 열거형을 사용하는 것이 좋다

 

 

공용체(Union)
어떤 메모리 주소를 어떤 방식으로 읽을 것인가와 관련된 구조체이다
즉, 하나의 메모리 주소를 여러 자료형으로 해석할 수 있게끔 하는 문법이다

 

 

구조체 vs. 공용체

 

- 구조체 (Struct)

각 멤버가 서로 독립적이며 서로 다른 데이터 타입일 때

멤버 간에 서로 독립적인 값을 갖고 있을 때

 

- 공용체 (Union)

여러 멤버 중 하나만 사용되어야 하거나,

서로 다른 데이터 타입을 동일한 메모리 공간에 공유하고자 할 때

각 멤버의 값이 서로 영향을 미치거나 동일한 메모리를 공유해야 할 때

 

- 사용 예시

struct Postion
{
    int x;
    int y;
};

union Coordinate
{
    struct Postion position;
    int array[2];
};

int main() 
{
    // 구조체
    struct Position curPos = {10, 20};
    
    // 공용체
    union Coordinate myCoordinate;
    
    // 공용체 방식 1
    myCoordinate.position.x = 30;
    myCoordinate.position.y = 40;
    
    // 공용체 방식 2
    myCoordinate.array[0] = 50;
    myCoordinate.array[1] = 60;
    
    return 0;
}

 

이처럼,

myCoordinate.point를 통해 좌표 정보를 나타내는 구조체처럼 읽을 수 있고

myCoordinate.array를 통해 배열 형태로 읽을 수 있다

이것이 공용체의 특징 중 하나이며, 여러 멤버가 동일한 메모리를 공유하기 때문에

하나의 멤버를 변경하면 다른 멤버도 변경되는 특성을 이용하여

다양한 형태로 메모리를 해석할 수 있다

저작자표시 비영리 변경금지 (새창열림)

'C > [코드조선] C 핵심' 카테고리의 다른 글

[C] 파일 입출력 (2)  (0) 2024.02.16
[C] 파일 입출력 (1)  (0) 2024.02.16
[C] 구조체 vs. 클래스  (0) 2024.02.14
[C] 비트필드와 비트플래그  (0) 2024.02.14
[C] 바이트 정렬  (0) 2024.02.13
'C/[코드조선] C 핵심' 카테고리의 다른 글
  • [C] 파일 입출력 (2)
  • [C] 파일 입출력 (1)
  • [C] 구조체 vs. 클래스
  • [C] 비트필드와 비트플래그
묻공러
묻공러
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.