如何在编译时将组合文字常量转换为wchar?

时间:2016-06-30 12:41:03

标签: c++ visual-studio-2013

我有一个在预处理器宏中定义的组合文字常量,例如

#define A "1"
#define B "3"
#define VERSION A "." B

最后我想通过使用_T宏将其转换为wchar_t *,例如:

TCHAR * version = _T(VERSION);

但是,无法使用Visual Studio 2013运行时编译,并出现以下错误:

  

连接不匹配的字符串

似乎它已在新版本中修复,上面的代码使用VS2015运行时编译时没有任何问题。

如何使其与VS2013运行时一起使用?

2 个答案:

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

工作正常。