像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"
如何使用宏将两个连接的 char 字符串转换为 wchar_t
?问题是我有一些已经存在的宏:
#define BAR "The fist line\n" \
"The second line\n"
我想在编译期间将它们转换为 wchar
字符串。编译器是windows下的ICC。
编辑:
_L
宏在 gcc 中工作,MSVC 和 ICC 不工作,这是一个编译器错误。
感谢@R..给我评论。
最佳答案
我认为你做不到。
宏只是做简单的文本处理。可以在开头加L
,但分不清"abc\n""def\n"
是两个字符串,需要加L
两次。
如果将字符串传递给以逗号分隔而不是串联的宏,则可以取得进展:
L("abc\n", "def\n")
定义正好接受两个字符串的 L
很简单:
#define L2(a,b) _L(a) _L(b)
将其概括为具有获取任意数量参数并在正确位置添加 L
的单个宏是可能的,但更复杂。您可以在 Jens Gustedt's P99 macros 中找到执行此类操作的聪明宏。 .
关于c - 如何定义宏以将连接的 char 字符串转换为 C 中的 wchar_t 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10731428/