【发布时间】:2010-09-30 13:43:20
【问题描述】:
我想用一个宏来连接两个宽字符串,所以我定义了一些宏:
#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"。
【问题讨论】:
-
请注意,标识符开头的
_后跟大写字母是保留字(虽然我不确定,但只能是 c++)。您可以将_放在末尾,例如STR_和TOWSTRING_。 -
另外,REVISION 不应该出现在 BUILD 之后吗?关于保持构建计数,看看here也许它可能有用(或者你可能有更好的主意!)