當使用宏聲明一些全局變量時,我遇到了一個問題。這裏的例子:在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 2011-02-12 11:02:54