Pregunta

Tendrás que perdonar mi ignorancia, pero no estoy acostumbrado a usar juegos de caracteres anchos en c ++, pero ¿hay alguna manera de que pueda usar literales de cadena ancha en c ++ sin poner una L delante de cada literal?

Si es así, ¿cómo?

¿Fue útil?

Solución

No, no lo hay. Debe usar el prefijo L (o una macro como _T () con VC ++ que se expande a L de todos modos cuando se compila para Unicode).

Otros consejos

El nuevo estándar C ++ 0x define otra forma de hacer esto:
http://en.wikipedia.org/wiki/C%2B%2B0x#New_string_literals

en una nota relacionada .. Estoy tratando de hacer lo siguiente

#define  get_switch( m )   myclass::getSwitch(L##m)

que es una macro que se expandirá

get_switch(isrunning)

en

myclass::getswitch(L"isrunning")

esto funciona bien en c ++ visualstudio 2008

pero cuando compilo el mismo código en mac Xcode (para iphone) me sale el error:

error: 'L' was not defined in this scope.

EDITAR: Solución

#define  get_switch( m )   myclass::getSwitch(L ## #m)

esto funciona tanto en vc ++ como en mac xcode (gcc)

¿Por qué no desea prefijar los literales de cadena con una L? Es bastante simple: las cadenas sin una L son cadenas ANSI ( const char * ), las cadenas con una L son cadenas de caracteres anchos ( const wchar_t * ). Existe la macro TEXT () , que convierte una cadena literal en un ANSI o una cadena de caracteres anchos dependiendo del proyecto actual que está configurado para usar Uncode:


#ifdef UNICODE
#define TEXT(s) L ## s
#else
#define TEXT(s) s
#endif

También existe la macro _T () , que es equivalente a TEXT () .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top