1 분 소요

우선 아래 방법은 변수로 해서 전체를 바꾸는건 불가능. ㅜㅜ

다른 방법을 찾아봐야 것다. 에휴.

갑자기 enum 을 string으로 바꿀수 있을까? 라는 생각이 갑자기 든다..

모 결국.. C에서도 가능하다라는게 답이다.

사용 방법은 #define 문이다.. 흐흐

#define f(x) #x   « 요렇게 하면 x에 값을 넣으면 그 enum값이 string으로 나오게 된다.

위 #는 매크로 인자를 문자열로 바뀌주는 역할을 한다.

예제는 아래와 같다..

#include

#define f(x) #x

typedef enum

{

test1,

test2,

test3

}enum_test;

void main(void)

{

char * test;

test = f(test1);

printf(“%d \n”,test1);

printf(“%s \n”,test1);

printf(“%s \n”,test);

}

결과값은 아래와 같다..

0

(null)

test1

Press any key to continue

이 기능이 왜 필요할까??

흠.. 요세 dll을 만드는데 관련해서 header는 그대로인데 간혹가다 dll을 가져다 쓰는 팀에서 enum값에 추가를 해버려서

나중에 동일한 header로 처리가 불가능하게 된다..

그래서 아예 파서를 만들어 놓고 dll안에서 외부에서 준 string을 enum값으로 파싱할때 쓰면 좋을것 같아서 찾아봤다.

아웅.. 재밌다..^^; 그런데 string을 enum으로는 어떻게 바꾸지?

모 이건 enum 선언되어 있으니까 비교해서 넣어주면 될것같군.. 우선 패스.. ^^;

자.. 새로운 방법?? 은 아닌것 같지만.. 조금 이쁘게 바꿀수는 있을것 같다.

typedef enum

{

one,

two

}number;

char *num[2] = { “one”, “two”}

좀 지저분 해지것지만 그래도 switch case 문을 남발하는것 보다는 나을듯 한다..

어찌됏던 배열 포인터를 사용해서 string을 넣고.

관련 enum string이 넘어오면 비교하는 구문을 작성하면 될듯하다..

대충짜면 아래랑 같은디..

#include

#include

typedef enum

{

one,

two,

three,

four

}number;

#define f(x) #x

int String_Counter(char * str)

{

for(int i = 0; i<255 ; i++)

{

if(*str++ == NULL)

return i+1;

}

return i;

}

void main(void)

{

char *temp1[4] = {“one”,

“two”,

“three”,

“four”};

char * before = “two”;

for(int i =0 ; i < 4 ; i++)

{

if(!memcmp(before, temp1[i], String_Counter(before)*sizeof(char)))

{

printf(“%d \n”,i);

}

}

}

흠. 그냥 enum 안에 있는 값을 자동으로 string으로 바꿔주는건 없을까??

C#에는 있다는데.. ㅜㅜ

좀더 찾아보자고.. 아우.

\

태그:

카테고리:

업데이트: