프로그래밍/C2011. 11. 28. 14:48

(참조: C언어 펀더멘탈, 전웅 저, 한빛 미디어)


이놈은 농담이고, 열거자에 대한 여러가지 알아야 할 것들을 적어 보았다.


동일한 값을 나타내도록 선언 할 수 있음

    enum food { apple = 2, orange = 2, banana = 2 };


대소관계를 순서로 가질 필요도 없음

    enum food { apple = 2, orange = 3, banana = 1};


열거상수로 선언되는 명칭은 일반 명칭과 동일한 이름 공간을 사용

    enum food { apple = 2, orange = 3, banana = 4};

    int apple; /* wrong */


값이 지정되어 있지 않은 경우,

첫번째 열거자면 0으로 값을 갖는다

첫번째가 아니라면 앞의 값보다 하나 큰 값을 가진다.


열거형에는 불완전형의 개념이 존재하지 않는다.

    enum food *p; /* wrong */

    enum food;     /* wrong */


열거형을 위해 사용할 정수형은 다음과 같다.

(signed/unsigned) char

signed/unsigned short int

signed/unsigned int

signed/unsigned long int


열거의 올바른 사용법

가장 올바르게 열거를 사용하기 위해서는 열거를 마치 구조체나 공용체처럼 완전히 독립된 데이터형으로 다루어야 한다. 그러기 위해선, 다음과 같이...

  • 열거형 대상체에는 반드시 그 열거형이 멤버로 갖는 열거 상수만을 대입한다.
  • 열거형 대상체를 다른 정수형의 값과 함께 연산에 사용하는 경우, 반드시 적절한 캐스트 연산자와 주석을 통해 의도를 분명히 밝힌다.
  • 열거형 대상체에 해당 열거형의 열거 상수가 아닌 임의의 정수값을 대입할 필요가 있다면, 그 정수값을 열거형의 멤버로 추가하는 것을 고려한다.
  • 서로 다른 열거형 사이에 대입이나 연산은 피한다.



Posted by code cat