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 의 활용과 내재화 등 소프트웨어 개발 전반에 도움이 필요하다면 도움을 요청하세요. 지인이라면 가볍게 도와드리겠습니다. 전문적인 도움이 필요하다면 저의 현업에 방해가 되지 않는 선에서 협의가능합니다.
agMAX 가 6이 아니라 3이 나오는거 아닌가요?
첫 번째 예제에선 6이 나오는 게 맞습니다. 적어도 제 기억이 맞다면요. 이상하다고 생각하시면 직접 코드를 복사해서 확인해보세요. 음… 정말 제가 틀렸을지도 모를 일이죠. ^^
음… 이상하게 생각되서 확인해보고 하는 말인데요. 이상하군요…
그렇죠? 그래서 글로 써놓은 거랍니다.
아… 그 뜻이 아니라, 테스트해보니 3이 나오는데 6이라고 쓰신게 이상하다는…
지적해주신 부분이 맞습니다. 3이 나오는데, 바보 같이 글로 옮겨 적을 때 실수했나 봅니다. 지적해주셔서 감사합니다.
ㅠ.ㅠ