请原谅我的无知,我不习惯在c++中使用宽字符集,但是是否有一种方法可以在c++中使用宽字符串字面值而不必在每个字面值前面添加L呢?
如果有的话,该怎么做呢?
没有,你必须使用L前缀(或者在使用VC++时使用_T()宏,在编译为Unicode时会自动展开为L)。
顺便提一下.. 我正在尝试做以下事情
#define get_switch( m ) myclass::getSwitch(L##m)
这是一个宏,将会被扩展。
get_switch(isrunning)
转化为
myclass::getswitch(L"isrunning")
这段代码在 C++ Visual Studio 2008 中可以正常运行。
但是当我在 Mac Xcode(用于 iPhone)下编译相同的代码时,会出现以下错误:
error: 'L' was not defined in this scope.
编辑:解决方案
#define get_switch( m ) myclass::getSwitch(L ## #m)
这适用于VC++和Mac Xcode(GCC)。
#define get_switch( m ) myclass::getSwitch(L ## #m)
吗? - D.Shawleyconst char*
),带有 L 的字符串是宽字符字符串(const wchar_t*
)。有一个 TEXT()
宏,可以根据当前项目是否设置为使用 Unicode 将字符串字面值转换为 ANSI 或宽字符字符串:
#ifdef UNICODE
#define TEXT(s) L ## s
#else
#define TEXT(s) s
#endif
还有_T()
宏,它等同于TEXT()
。