Enum 값에 해당하는 문자열 출력 질문드립니다. c/c++
글쓴이: idrukawa / 작성시간: 목, 2012/04/05 - 5:39오후
제목이 이상한데요... 정리가 안되서..ㅎ
enum TEST_ENUM
{
ONE,
TWO,
THREE
};
이렇게 정의된 ENUM이 있다고 가정합니다.
int xxxx( int iEnum )
{
printf( "%s\n", yyyy(iEnum) );
}
이렇게 사용했을 때,
iEnum == 0 이면 ONE을 출력,
iEnum == 1 이면 TWO를 출력,
iEnum == 2 이면 THREE를 출력하고 싶습니다.
이때 적합한 yyyy() 함수가 있는지?
아니면 맨땅에 구현을 해야하는지?
구현을 한다면 enum 선언에서 "ONE", "TWO", "THREE" 은
어떻게 문자열로 받아와야 하는지?( fread()? ) 등에 대한 조언을 듣고 싶습니다.
잘부탁드립니다.
Forums:
예전에 다른 분이 올린 걸 한 번 봤던
예전에 다른 분이 올린 걸 한 번 봤던 내용이네요.
라서...
링크1: http://eslife.tistory.com/300
링크2: http://kldp.org/node/86547
구글링크: https://www.google.co.kr/webhp?sourceid=chrome-instant&ix=sea&ie=UTF-8&ion=1#hl=ko&newwindow=1&output=search&sclient=psy-ab&q=enum%20%EB%AC%B8%EC%9E%90%EC%97%B4&oq=&aq=&aqi=&aql=&gs_l=&pbx=1&fp=78d85ee5a643f85d&ix=sea&ion=1&bav=on.2,or.r_gc.r_pw.r_cp.r_qf.,cf.osb&biw=1376&bih=851
Signature :) - "여유를 갖고 행동하되 게을러지지 말자"
답변 감사합니다. 링크1, 2 모두 확인해
답변 감사합니다.
링크1, 2 모두 확인해 보았습니다.
하지만 이미 선언된 ENUM 값들을 별도의 파일에서 다시 일일이 선언해줘야하는 불편함이 있네요...
현재 문자열로 출력하고 싶은 ENUM은 저만 정의하는 것이 아니라 여러 명이 정의해서 사용하고 있습니다.
언제 추가/삭제될지 모르는 일이고 이럴때마다 수작업으로 이런일을 한다는것은 적지않은 노가다네요;;
언어의 한계라서 원하시는 방향까지는 힘들지 않나
언어의 한계라서 원하시는 방향까지는 힘들지 않나 싶습니다.
코드를 만드는 유틸을 따로 하나 만드셔서 enum 타입에 대한 문자열 선언도 같이 만들어주도록 해서 복사해서 붙여 쓰는 방법은 어떤가요?
Signature :) - "여유를 갖고 행동하되 게을러지지 말자"
Google에서 enum into string c 로 검색해 나온 첫 링크
http://stackoverflow.com/questions/147267/easy-way-to-use-variables-of-enum-types-as-string-in-c
이거면 괜찮을듯...
http://stackoverflow.com/a/148610
ㅋㅋㅋㅋ
// 아래와 같이 namespace 를 이용할 경우 traverse 및 관련 값 관리에 있어서 탁월한 편의성과 확장성을 보여준다.
// ex) for ( unsigned long i = Test::BEGIN ; i < Test::CNT ; ++i ){}
// 출처 나........
namespace Test
{
enum Enum
{
BEGIN = 0,
one = BEGIN,
two,
three,
END = three,
CNT = ENT + 1,
};
const CString STRING[CNT] =
{
_T("one"),
_T("two"),
_T("three"),
};
};
#define IS_VALID_TEST(value) (Test::BEGIN <= value && value <= Test::END)
void PrintTest(int iInput)
{
if ( !IS_VALID_TEST(iInput) )
{
printf("ERROR : Check the input value!");
}
printf("Matching string is %s\n", Test::STRING[iInput]);
return;
}
옛날글이라 이미 해결 하셨을런지도
옛날글이라 이미 해결 하셨을런지도 모르겠네요.
한두개의 enum이라면 수작업으로 해도 되는데, 그게 많아지면 별도의 prebuild단계를 두는것도 해결책이 됩니다.
별도의 텍스트 파일에 enum을 적어두고, 그걸 파싱해서 enum과 관련 문자열을 선언한 소스파일/해더파일을 작성해주는 프로그램을 작성하는 겁니다.
그리고 본 프로그램에서는 prebuild단계에서 생성된 소스/해더파일을 가져와서 쓰는 거지요.
댓글 달기