2008-11-03 6 views

Respuesta

25

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).

+6

Eso no es del todo exacto. la macro _T() solo se expande a L en usted define UNICODE. ese es esencialmente el punto de tenerlo como una macro. si quieres que la cadena siempre sea unicode solo usa L directamente. – shoosh

+0

Sí, por supuesto. Debería haber mencionado eso. – Ferruccio

1

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


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

También existe la _T() macro, lo que equivale a TEXT() .

+0

Estamos leyendo en archivos que puede estar en Unicode y generando un xml Unicode, por lo que la asignación de conversión que estamos haciendo internamente compara una cadena de caracteres wstring con nuestro literal de cadena. – Fry

+0

@ Adam - solo curiosidad - ¿sabes si las macros _T y TEXT son parte del estándar de lenguaje o son específicas de MS VC++? –

+0

Está en WinNT.h (se incluye desde windows.h). No lo consideraría como específico de VC++, sino específico de Windows, ya que estaría disponible en cualquier configuración que le permita crear aplicaciones WinAPI. – KTC

3

en una nota relacionada .. que estoy tratando de hacer lo siguiente

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

que es una macro la ampliará

get_switch(isrunning) 

en

myclass::getswitch(L"isrunning") 

esto funciona bien en C++ VisualStudio 2008

pero cuando i compilar el mismo código en Mac Xcode (para iPhone) me sale el error:

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

EDIT: Solución

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

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

+1

¿No debería ser '#define get_switch (m) myclass :: getSwitch (L ## #m) '? –

+0

gracias que de hecho funciona ... lo tuve que trabajar con myclass :: getSwitch (L "" #m) también – ShoeLace

Cuestiones relacionadas