문제

식별자와 문자열의 일치하는 목록을 생성한다고 가정 해

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);

이런 식 으로이 이름 목록은 여러 번 재사용 할 수 있습니다. 새로운 언어 기능을 프로토 타이핑하는 데 사용했지만 결국 사용하지는 않았습니다. 따라서 다른 것이 없다면, 그들은 자신의 발명품에서 막 다른 곳을 찾는 좋은 방법이었습니다. 그들이 말하는 것이 "매크로는 나쁘다"라는 말 ... :)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top