我想使用宏连接两个宽字符串,所以我定义了一些宏:
#define VERSION_MAJOR 1
#define VERSION_MINOR 1
#define VERSION_BUILD 0
#define VERSION_REVISION 0
#define _STR(s) #s
#define STR(s) _STR(s)
#define _TOWSTRING(x) L##x
#define TOWSTRING(x) _TOWSTRING(x)
//http://stackoverflow.com/questions/240353/convert-a-preprocessor-token-to-a-string
#define PRODUCT_ELASTOS_VERSION STR(VERSION_MAJOR) "." \
STR(VERSION_MINOR) "." \
STR(VERSION_BUILD) "." \
STR(VERSION_REVISION)
现在我想使用宏PRODUCT_ELASTOS_VERSION定义一个新的宏PRODUCT_ELASTOS_VERSION_W,它的值应为L“1.1.0.0”。那么如何定义这个宏呢? TOWSTRING(PRODUCT_ELASTOS_VERSION)是错误的答案。
如果我想连接字符串,我该怎么写? L“v”TOWSTRING(PRODUCT_ELASTOS_VERSION)无法获得宽字符串L“v1.1.0.0”。
答案 0 :(得分:0)
首先,PRODUCT_ELASTOS_VERSION
不会扩展为“1.1.0.0”,它会扩展为
"1" "." "1" "." "0" "." "0"
保持相同的结构,您可以定义另一个扩展为
的标识符L"1" L"." L"1" L"." L"0" L"." L"0"
与
#define _LSTR(s) L ## #s
#define LSTR(s) _LSTR(s)
#define ANOTHER_IDENTIFIER LSTR(VERSION_MAJOR) L"." \
LSTR(VERSION_MINOR) L"." \
LSTR(VERSION_BUILD) L"." \
LSTR(VERSION_REVISION)