gpt4 book ai didi

c - 如何定义宏以将连接的 char 字符串转换为 C 中的 wchar_t 字符串

转载 作者:太空狗 更新时间:2023-10-29 17:25:48 25 4
gpt4 key购买 nike

像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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com