반응형
enum 열거형
* 일반적인 사용법
enum COUNTRY
{
COUNTRY_FIRST,
COUNTRY_KOREA = COUNTRY_START,
COUNTRY_AMERICA,
COUNTRY_INDIA,
COUNTRY_GERMANY,
COUNTRY_LAST
}
int main(void)
{
COUNTRY country;
country = COUNTRY_KOREA,
for(int i=COUNTRY_FIRST; i<COUNTRY_LAST, i++)
{
......
}
return 0;
}
{
COUNTRY_FIRST,
COUNTRY_KOREA = COUNTRY_START,
COUNTRY_AMERICA,
COUNTRY_INDIA,
COUNTRY_GERMANY,
COUNTRY_LAST
}
int main(void)
{
COUNTRY country;
country = COUNTRY_KOREA,
for(int i=COUNTRY_FIRST; i<COUNTRY_LAST, i++)
{
......
}
return 0;
}
가급적 처음과 끝을 지정할 수 있는 값을 넣어주는 것이 좋음.
하지만 아래와 같은 경우 이름이 겹치는 문제가 발생할 수 있다.
enum VERTICAL { TOP, CENTER, BOTTOM};
enum HORIZONTAL { LEFT, CENTER, RIGHT};
프로젝트가 클 경우에는 이런 경우가 자주 발생을 하며 항상 이름을 바꾸려면 번거로울 뿐만 아니라 원치 않는 엉뚱한 값이 들어갈 가능성도 크다.
따라서 아래와 같은 방법으로 사용해보자.
* namespace와 결합하는 방법
namespace VERTICAL
{
enum ALIGN { TOP, CENTER, BOTTOM};
}
namespace HORIZONTAL
{
enum ALIGN { LEFT, CENTER, RIGHT};
}
int main(void)
{
VERTICAL::ALIGN vAlign;
HORIZONTAL::ALIGN hAlign;
vAlign = VERTICAL::CENTER;
hAlign = HORIZONTAL::CENTER;
}
{
enum ALIGN { TOP, CENTER, BOTTOM};
}
namespace HORIZONTAL
{
enum ALIGN { LEFT, CENTER, RIGHT};
}
int main(void)
{
VERTICAL::ALIGN vAlign;
HORIZONTAL::ALIGN hAlign;
vAlign = VERTICAL::CENTER;
hAlign = HORIZONTAL::CENTER;
}
위와 같은 방법으로 사용하면 의미도 좀더 명확해지고 이름을 지을 때 중복될 것을 걱정하지 않아도 된다.
비슷한 다른 방법으로는 Class를 사용하는 방법도 있다.
* Class를 사용하는 방법
class VERTICAL
{
public:
enum ALIGN { TOP, CENTER, BOTTOM};
}
class HORIZONTAL
{
public:
enum ALIGN { LEFT, CENTER, RIGHT};
}
int main(void)
{
VERTICAL::ALIGN vAlign;
HORIZONTAL::ALIGN hAlign;
vAlign = VERTICAL::CENTER;
hAlign = HORIZONTAL::CENTER;
}
{
public:
enum ALIGN { TOP, CENTER, BOTTOM};
}
class HORIZONTAL
{
public:
enum ALIGN { LEFT, CENTER, RIGHT};
}
int main(void)
{
VERTICAL::ALIGN vAlign;
HORIZONTAL::ALIGN hAlign;
vAlign = VERTICAL::CENTER;
hAlign = HORIZONTAL::CENTER;
}
하지만 enum을 사용할 경우 아래와 같이 여러 가지 문제가 있으니 주의하여 사용하도록 하자.
- int로의 암묵적인 변환
- 바탕 형식을 명시하지 못함
- 이상한 범위 적용
참고 : http://occamsrazr.net/tt/184
반응형
'프로그래밍 > C C++' 카테고리의 다른 글
메모리 영역 (0) | 2013.04.20 |
---|---|
크리티컬 섹션(Critical Section) (0) | 2013.03.21 |
% 서식문자 정리 (0) | 2013.03.01 |
프로그래밍/바이트 오더(byte order) (0) | 2011.03.15 |
프로그래밍/assert (0) | 2010.03.05 |