[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
};
Kubernetes, DevSecOps, AWS, 클라우드 보안, 클라우드 비용관리, SaaS 의 활용과 내재화 등 소프트웨어 개발 전반에 도움이 필요하다면 도움을 요청하세요. 지인이라면 가볍게 도와드리겠습니다. 전문적인 도움이 필요하다면 저의 현업에 방해가 되지 않는 선에서 협의가능합니다.
follow me
  • RT @not_unot_u: 네 번째 올리신 청원글이에요. 너무 고생하고 계시는데 동의 한 번 씩 부탁드립니다. 거의 다 왔습니다! 7월 11일 마감인데 이제 2만명만 채우면 청와대 답변 받을 수 있어요. https://t.co/3mVDM3jsrP
    1 day ago
  • 그런데 전화를 받은 윤석열 검찰총장이 박 장관에게 ‘(조국 후보자가) 이제 그만 물러나라는 뜻으로 제가 (압수수색을) 지시했습니다’ 이렇게 말했다는 거지. 윤석열을 대통령으로 뽑은 기억은 없는데 희안하구만 https://t.co/yEEQXfey4g
    1 day ago
  • 훌륭한 시스템을 체험하지 못한 사람이 시스템의 부재로 야기되는 문제를 인식할 수 있을까? “난 잘하고 있는데 왜 너는 자꾸 불평하느냐?”라고 생각하지 않을까?
    2 days ago
Buy me a coffeeBuy me a coffee
×
Kubernetes, DevSecOps, AWS, 클라우드 보안, 클라우드 비용관리, SaaS 의 활용과 내재화 등 소프트웨어 개발 전반에 도움이 필요하다면 도움을 요청하세요. 지인이라면 가볍게 도와드리겠습니다. 전문적인 도움이 필요하다면 저의 현업에 방해가 되지 않는 선에서 협의가능합니다.
Latest Posts