如何在C中使用宏连接两个宽字符串?

时间:2010-09-30 13:43:21

标签: c macros

我想使用宏连接两个宽字符串,所以我定义了一些宏:

#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”。

1 个答案:

答案 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)