【发布时间】:2012-05-30 16:18:11
【问题描述】:
和Visual Studio中的_T()宏一样,我定义并使用了自己的_L宏为:
#define _L(x) __L(x)
#define __L(x) L ## x
适用于:
wprintf(_L("abc\n"));
但是得到一个编译错误:
wprintf(_L("abc\n""def\n"));
它报告“不能连接具有不同字符类型的字符串文字”。
我也做过:
#define _L2(x) __L2(x)
#define __L2(x) L ## #x
wprintf(_L2("abc\n""def\n"));
代码被编译,但\n 不能作为新行的转义序列。 \n 变成两个字符,wprintf 的输出是:
"abc\n""def\n"
如何使用宏将两个连接的字符字符串转换为wchar_t?问题是我有一些已经存在的宏:
#define BAR "The fist line\n" \
"The second line\n"
我想在编译期间将它们转换为 wchar 字符串。 windows下编译器为ICC。
编辑:_L 宏在 gcc 中有效,MSVC 和 ICC 无效,这是一个编译器错误。
感谢@R.. 给我评论。
【问题讨论】:
-
如果我没记错的话,你不需要写宏。只需将字符串彼此相邻放置,它们就会自动连接成一个。至少这适用于 gcc。
-
这纯粹是 MSVC 中的一个错误。 C 语言允许连接不同宽度的字符串,结果是一个宽字符串。
-
@nhahtdh 我不是要连接两个字符串。我想将联系字符串转换为 wchar。
-
与
L""连接是转换为宽字符串的标准规范方式。 -
看起来 MSVC 符合 C89 但不符合 C99。见stackoverflow.com/questions/2192416/…