C 식별자와 문자열을 모두 만들 수 있습니까?
-
02-07-2019 - |
문제
식별자와 문자열의 일치하는 목록을 생성한다고 가정 해
enum
{
NAME_ONE,
NAME_TWO,
NAME_THREE
};
myFunction(NAME_ONE, "NAME_ONE");
myFunction(NAME_TWO, "NAME_TWO");
myFunction(NAME_THREE, "NAME_THREE");
.. 자신을 반복하고 코드를 자동 생성하지 않고 C/C ++ 매크로 사용
초기 추측 :
포함 된 #include 파일을 추가 할 수 있습니다
myDefine(NAME_ONE)
myDefine(NAME_TWO)
myDefine(NAME_THREE)
그런 다음 두 번 사용하십시오.
#define myDefine(a) a,
enum {
#include "definitions"
}
#undef myDefine
#define myDefine(a) myFunc(a, "a");
#include "definitions"
#undef myDefine
그러나 #Define은 매개 변수를 문자열 내에 넣을 수 없습니까?
해결책
두 번째 #define의 경우 # preprocessor 연산자를 사용해야합니다.
#define myDefine(a) myFunc(a, #a);
그것은 인수를 문자열로 변환합니다.
다른 팁
이름 목록을 선언하는 좋은 방법은 다음과 같습니다.
#define FOR_ALL_FUNCTIONS(F)\
F(NameOne)\
F(NameTwo)\
F(NameThree)\
#define DECLARE_FUNCTION(N)\
void N();
#define IMPLEMENT_FUNCTION(N)\
void N(){}
FOR_ALL_FUNCTIONS(DECLARE_FUNCTION);
FOR_ALL_FUNCTIONS(IMPLEMENT_FUNCTION);
이런 식 으로이 이름 목록은 여러 번 재사용 할 수 있습니다. 새로운 언어 기능을 프로토 타이핑하는 데 사용했지만 결국 사용하지는 않았습니다. 따라서 다른 것이 없다면, 그들은 자신의 발명품에서 막 다른 곳을 찾는 좋은 방법이었습니다. 그들이 말하는 것이 "매크로는 나쁘다"라는 말 ... :)
제휴하지 않습니다 StackOverflow