Rol*_*dXu 6 c string macros wchar
像_T()Visual Studio中的宏一样,我定义并使用了我自己的_L宏:
#define _L(x) __L(x)
#define __L(x) L ## x
Run Code Online (Sandbox Code Playgroud)
它适用于:
wprintf(_L("abc\n"));
Run Code Online (Sandbox Code Playgroud)
但得到一个编译错误:
wprintf(_L("abc\n""def\n"));
Run Code Online (Sandbox Code Playgroud)
它报告"不能连接不同字符种类的字符串文字".
我也做了:
#define _L2(x) __L2(x)
#define __L2(x) L ## #x
wprintf(_L2("abc\n""def\n"));
Run Code Online (Sandbox Code Playgroud)
代码被编译,但\n不能作为新行的转义序列.所述\n变两个字符,并输出wprintf为:
"ABC \n" "高清\n"
我怎么能有一个宏将两个连接的char字符串转换为wchar_t?问题是我有一些已经存在的宏:
#define BAR "The fist line\n" \
"The second line\n"
Run Code Online (Sandbox Code Playgroud)
我想wchar在编译期间将它们转换为字符串.编译器是Windows中的ICC.
编辑:
在_Lgcc的宏观工程,MSVC和ICC没有工作,这是一个编译器错误.谢谢@R ..对我发表评论.
我不认为你能做到这一点。
宏只是做简单的文本处理。他们可以L在开头相加,但无法判断这"abc\n" "def\n"是两个字符串,需要相加L两次。
如果将字符串传递给以逗号分隔的宏,而不是连接起来,则可以取得进展:
L("abc\n", "def\n")
定义L它只接受两个字符串很简单:
#define L2(a,b) _L(a) _L(b)
将其概括为一个宏,该宏可以获取任意数量的参数并L在正确的位置添加 s 是可能的,但更复杂。您可以在Jens Gustedt 的 P99 宏中找到执行此类操作的巧妙宏。