如何在c ++中使用宽字符串文字而不将L放在每个文字的前面
题
你必须原谅我的无知,但我不习惯在c ++中使用宽字符集,但是有没有一种方法可以在c ++中使用宽字符串文字而不在每个文字前放置一个L?
若然,怎么样?
解决方案
不,没有。你必须使用L前缀(或一个宏,如_T()与VC ++,当编译为Unicode时,无论如何都会扩展为L。)
其他提示
新的C ++ 0x Standard定义了另一种方法:
http://en.wikipedia.org/wiki/C%2B%2B0x#New_string_literals
相关说明.. 我正在尝试做以下事情
#define get_switch( m ) myclass::getSwitch(L##m)
这是一个将扩展的宏
get_switch(isrunning)
到
myclass::getswitch(L"isrunning")
这在c ++ visualstudio 2008中运行良好
但是当我在mac Xcode(对于iphone)下编译相同的代码时,我得到错误:
error: 'L' was not defined in this scope.
编辑:解决方案
#define get_switch( m ) myclass::getSwitch(L ## #m)
这适用于vc ++和mac xcode(gcc)
为什么你不想在字符串文字前加上L?这很简单 - 没有L的字符串是ANSI字符串( const char *
),带有L的字符串是宽字符串( const wchar_t *
)。有 TEXT()
宏,它根据当前项目设置为使用Uncode,将字符串文字转换为ANSI或宽字符串:
#ifdef UNICODE
#define TEXT(s) L ## s
#else
#define TEXT(s) s
#endif
还有 _T()
宏,相当于 TEXT()
。
不隶属于 StackOverflow