더북(TheBook)

이때 앞에서 본 것과 배열 원소의 순서가 다르다. 이처럼 열거형은 배열의 순서를 그대로 따르지 않아도 되는 장점이 있다. 열거형 타입을 선언할 때 정한 순서에 따라 자동으로 처리되는 것이다.

까마귀 종류를 추가하고 싶다면 corvid_num 앞에 그냥 추가하면 된다.

 

예제 5-1 열거 타입과 스트링 배열

enum corvid {magpie, raven, jay, chough, corvid_num, };
char const*const bird[corvid_num] = {
  [chough] = "chough",
  [raven]  = "raven",
  [magpie] = "magpie",
  [jay]    = "jay",
);

다른 좁은 타입과 마찬가지로 열거형 배열을 선언할 때 특별히 신경 쓸 일은 없다. 열거형을 인덱스나 산술식에서 사용할 때는 어차피 넓은 타입 정수로 변환되기 때문이다. 게다가 열거형 상수 자체는 열거 타입이 아니다.

TAKEAWAY 5.43 열거형 상수(enumeration constant)signed int 타입이다.

여기서 중요한 부분은 새로 생성된 타입이 아니라 상수에 있다. 타입 이름에 태그(tag)C를 따로 제공할 필요 없이 모든 signed int 상수에 이름을 붙일 수 있다.

enum { p0 = 1, p1 = 2*p0, p2 = 2*p1, p3 = 2*p2, };
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.