如何将#defined string literal转换为宽字符串文字?

mac*_*nir 4 c c-preprocessor

可能重复:
如何使用C预处理器将连接字符串转换为wide-char?

我有一个使用#define定义的字符串文字:

#define B "1234\0"
Run Code Online (Sandbox Code Playgroud)

如何在编译时使用此定义来获取此宽字符串文字?:

L"1234\0"
Run Code Online (Sandbox Code Playgroud)

(只是#define带有L前缀的d字符串文字,使其成为一个宽字符串).

我试过这个:

#define MAKEWIDE(s) L##s
Run Code Online (Sandbox Code Playgroud)

但这会产生LB.

Mic*_*urr 7

令牌粘贴需要额外的间接级别才能正确处理用作操作数的宏.尝试类似的东西:

#define PASTE(x, y) x##y
#define MAKEWIDE(x) PASTE(L,x)
Run Code Online (Sandbox Code Playgroud)


R..*_*R.. 7

这将工作得很好:

#define B "1234\0"
#define LB L"" B
Run Code Online (Sandbox Code Playgroud)

  • 好的 - 这是MSVC无法做到的:错误C2308:连接不匹配的字符串连接宽""与窄"1234" (3认同)