매크로를 사용하여 일부 전역 변수를 선언 할 때 문제가 발생했습니다. 여기의 경우 :C++의 헤더 파일에서 매크로를 사용하여 변수를 선언하는 것이 옳습니까?
원래 코드 :
/* some_config.h */
static const std::string KEYWORDS_A[] = {"AXX", "AYY"};
static const std::vector<std::string> KEYWORDS_A_VEC(KEYWORDS_A, KEYWORDS_A + sizeof(KEYWORDS_A)/sizeof(KEYWORDS_A[0]));
static const std::string KEYWORDS_B[] = {"BXX", "BYY"};
static const std::vector<std::string> KEYWORDS_B_VEC(KEYWORDS_B, KEYWORDS_B + sizeof(KEYWORDS_B)/sizeof(KEYWORDS_B[0]));
현재 코드 :
/* some_config.h */
#define REGISTER_VEC(NAME) \
static const std::vector<std::string> KEYWORDS_##NAME_VEC(KEYWORDS_##NAME, KEYWORDS_##NAME + sizeof(KEYWORDS_##NAME)/sizeof(KEYWORDS_##NAME[0]))
static const std::string KEYWORDS_A[] = {"AXX", "AYY"};
REGISTER_VEC(A);
static const std::string KEYWORDS_B[] = {"BXX", "BYY"};
REGISTER_VEC(B);
some_config.h가 some.cpp에 포함 된 변수에 KEYWORDS_A_VEC KEYWORDS_B_VEC가 사용되었습니다. 그러나 의 경우 현재 코드 인 경우 g ++ 컴파일러는 KEYWORDS_A_VEC 및 KEYWORDS_A_VEC의 정의를 찾지 못하는 오류를 표시합니다.
코드에 문제가 있습니까? 당신의 도움을 주셔서 감사합니다. 당신은 당신이 토큰 화하고자하는 모든 장소에서 토큰 것, 예를 들어 필요가 있기 때문에 귀하의 컴파일 문제가 발생
전처리 기가 매크로 확장에 나타나는 매크로를 반복적으로 채우는 것과 관련이 있다고 생각합니다. 나는이 주제에 관해서는 상대적으로별로 알지 못하므로, 다른 C++ 전문가에게 맡겨서 도움을 줄 것이다. – templatetypedef