열거형(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 |