[C++] enum의 기본값

  • Post author:
  • Post category:
  • Post comments:6 Comments
  • Post last modified:January 24, 2008

enum 값 중 하나를 기본값으로 사용하려고 했다. 그래서 기본 성별을 나타내는 AG_DEFAULT를 기존 enum 중간에 끼워넣었다.

enum ACCOUNT_GENDER
{
	AG_MALE			= 1,		//!< Male
	AG_FEMALE		= 2,		//!< Female
	AG_NOTDEFINED	= 3,		//!< Not Defined
	AG_UNKNOWN		= 4,		//!< Unknown
	AG_DEFAULT = AG_FEMALE,
	AG_MAX
};

여기서 AG_MAX는 enum의 멤버 중 가장 큰 값을 나타내기 위해 추가했던 값이고, AG_DEFAULT는 AG_MAX 바로 위에 넣었다. 이렇게 코드를 고치고 마무리하려다가 문득 의문이 들었다. AG_DEFAULT 값이 2일 테니, AG_MAX의 값은 전처럼 5일까? 아니면 6일 됐을까? 그것도 아니면 AG_DEFAULT보다 1이 더 큰 3이 됐을까? 나로선 5가 나오길 기대하고 있었기에 검증할 겸 단위 테스트 코드를 짰다.

SUITE(SmartDBTest)
{
	TEST(GenderValues)
	{
		DWORD expectedAgMax = AG_UNKNOWN + 1;
		DWORD agMax = static_cast<DWORD>(AG_MAX);
		CHECK(agMax == expectedAgMax);
	}
}

이 테스트가 성공했으면 굳이 블로그에 포스팅하지 않았을 것이니, 당연히 이 테스트는 실패한다. 디버거로 agMAX와 expectedAgMax 값을 확인해보면 각각 3과 5이다. 아무래도 멤버 값을 지정해주지 않으면 소스 코드 상의 위치에 따라 값이 정해지나 보다. 이런 경우엔 AG_DEFAULT를 AG_FEMALE 바로 아래에 두면 원하는 결과가 나온다.

enum ACCOUNT_GENDER
{
	AG_MALE			= 1,		//!< Male
	AG_FEMALE		= 2,		//!< Female
	AG_DEFAULT = AG_FEMALE,
	AG_NOTDEFINED	= 3,		//!< Not Defined
	AG_UNKNOWN		= 4,		//!< Unknown
	AG_MAX
};
Author Details
Kubernetes, DevSecOps, AWS, 클라우드 보안, 클라우드 비용관리, SaaS 의 활용과 내재화 등 소프트웨어 개발 전반에 도움이 필요하다면 도움을 요청하세요. 지인이라면 가볍게 도와드리겠습니다. 전문적인 도움이 필요하다면 저의 현업에 방해가 되지 않는 선에서 협의가능합니다.
0 0 votes
Article Rating
Subscribe
Notify of
guest

This site uses Akismet to reduce spam. Learn how your comment data is processed.

6 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
전혜선
전혜선
16 years ago

agMAX 가 6이 아니라 3이 나오는거 아닌가요?

최재훈
16 years ago

첫 번째 예제에선 6이 나오는 게 맞습니다. 적어도 제 기억이 맞다면요. 이상하다고 생각하시면 직접 코드를 복사해서 확인해보세요. 음… 정말 제가 틀렸을지도 모를 일이죠. ^^

전혜선
전혜선
16 years ago

음… 이상하게 생각되서 확인해보고 하는 말인데요. 이상하군요…

최재훈
16 years ago

그렇죠? 그래서 글로 써놓은 거랍니다. 

전혜선
전혜선
16 years ago

아… 그 뜻이 아니라, 테스트해보니 3이 나오는데 6이라고 쓰신게 이상하다는…

최재훈
16 years ago

지적해주신 부분이 맞습니다. 3이 나오는데, 바보 같이 글로 옮겨 적을 때 실수했나 봅니다. 지적해주셔서 감사합니다.

ㅠ.ㅠ