檢查下面的宏:升壓預處理 - 奇怪的結果
#define INPUT (char, "microsecond", "us")(int, "millisecond", "ms")(int, "second", "s")(int, "minute", "min")(float, "hour", "h")
目標是增加圍繞每個元組雙括號導致:
((char, "microsecond", "us"))((int, "millisecond", "ms"))((int, "second", "s"))((int, "minute", "min"))((float, "hour", "h"))
現在我用下面的宏來做這項工作:
#define ADD_PAREN_1(A, B, C) ((A, B, C)) ADD_PAREN_2
#define ADD_PAREN_2(A, B, D) ((A, B, C)) ADD_PAREN_1
#define ADD_PAREN_1_END
#define ADD_PAREN_2_END
#define OUTPUT0 ADD_PAREN_1 INPUT
#define OUTPUT1 BOOST_PP_CAT(OUTPUT0, _END)
結果如下:
OUTPUT0是好的:
((char, "microsecond", "us")) ((int, "millisecond", C)) ((int, "second", "s")) ((int, "minute", C)) ((float, "hour", "h")) ADD_PAREN_2
但當BOOST_PP_CAT被稱爲OUTPUT1的結果是:
float
我不理解這種行爲。任何提示?
注意我使用Visual Studio 2010
暗示當日:不要使用宏。 –
@Alex:非常有幫助。謝謝 ! – Mark
爲什麼不只是在地區使用搜索和替換?是否有一些原因需要預處理器而不是編輯器加倍? – AShelly