(참조: 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
열거의 올바른 사용법
가장 올바르게 열거를 사용하기 위해서는 열거를 마치 구조체나 공용체처럼 완전히 독립된 데이터형으로 다루어야 한다. 그러기 위해선, 다음과 같이...
- 열거형 대상체에는 반드시 그 열거형이 멤버로 갖는 열거 상수만을 대입한다.
- 열거형 대상체를 다른 정수형의 값과 함께 연산에 사용하는 경우, 반드시 적절한 캐스트 연산자와 주석을 통해 의도를 분명히 밝힌다.
- 열거형 대상체에 해당 열거형의 열거 상수가 아닌 임의의 정수값을 대입할 필요가 있다면, 그 정수값을 열거형의 멤버로 추가하는 것을 고려한다.
- 서로 다른 열거형 사이에 대입이나 연산은 피한다.
'프로그래밍 > C' 카테고리의 다른 글
process & signal (0) | 2012.01.25 |
---|---|
error: invalide storage class for function 'xxxx' (0) | 2011.11.29 |
대상체의 기억수명 (0) | 2011.11.29 |
전처리기 (1) (0) | 2011.11.09 |
구조체 멤버로 주소 저장, 구조체 멤버로 연속적인 메모리 구성하기 (0) | 2011.10.23 |