#define参数被字符串化,但是对于一个宽字符串L"而不是"

时间:2014-01-01 13:56:04

标签: c++ c-preprocessor stringification

我需要将#define参数字符串化为宽字符串。

所以,而

#define c(x) x,#x

用作:

{c(maria),0,false},

给出:

{maria,"maria",0,false} // maria is a member of an enum.

我不知道如何做同样的事情,但创建一个宽字符串。

我的意思是"maria" L"maria"

而不是{{1}}

2 个答案:

答案 0 :(得分:3)

你可以这样做:

#define c(x) x,L###x

##串联是将L和带引号的字符串合并为一个预处理令牌所必需的(因为L字符串文字的一部分令牌)。

#define c(x) x,L###x
c(Hello)

通过预处理器(使用clang++ -E test.cpp)粘贴它会产生:

Hello,L"Hello"

答案 1 :(得分:0)

你为什么不试试

#define c(x) x,L#x

编辑:显然,这只适用于Visual Studio。因此,您应该像其他人建议的那样使用L###x