我有一个在预处理器宏中定义的组合文字常量,例如
#define A "1"
#define B "3"
#define VERSION A "." B
最后我想通过使用_T宏将其转换为wchar_t *,例如:
TCHAR * version = _T(VERSION);
但是,无法使用Visual Studio 2013运行时编译,并出现以下错误:
连接不匹配的字符串
似乎它已在新版本中修复,上面的代码使用VS2015运行时编译时没有任何问题。
如何使其与VS2013运行时一起使用?
答案 0 :(得分:2)
他们都需要宽阔或狭窄,尝试:
#define A L"1"
#define B L"3"
#define VERSION A L"." B
const wchar_t * version = VERSION;
或者
#define A "1"
#define B "3"
#define VERSION A "." B
const char * version = VERSION;
编辑:这个回复了评论
#define A "1"
#define B "3"
#define VERSION A "." B
#define EXPAND(x) _T(##x)
#define TO_WIDE(x) (EXPAND(x))
const wchar_t * version = TO_WIDE(VERSION);
答案 1 :(得分:0)
实际上我找不到完美的解决方案。但我发现如何修改VERSION宏的创建,以便能够简单地将_T宏应用于它。代码如下:
#define MAJOR 3
#define MINOR 1
#define DOT .
#define __STR2(x) #x
#define __STR(x) __STR2(x)
#define _CONCAT3(s1, s2, s3) s1 ## s2 ## s3
#define CONCAT3(s1, s2, s3) _CONCAT3(s1, s2, s3)
#define VERSION_STR __STR(CONCAT3(MAJOR, DOT, MINOR))
然后
TCHAR * version = _T(VERSION);
工作正常。