Comment utiliser des littéraux de chaîne larges en c ++ sans mettre L devant chacun

StackOverflow https://stackoverflow.com/questions/260125

  •  06-07-2019
  •  | 
  •  

Question

Vous devrez pardonner mon ignorance, mais je ne suis pas habitué à utiliser des jeux de caractères larges en c ++, mais existe-t-il un moyen d'utiliser des littéraux de chaîne large en c ++ sans mettre un L devant chaque littéral?

Si oui, comment?

Était-ce utile?

La solution

Non, il n'y en a pas. Vous devez utiliser le préfixe L (ou une macro telle que _T () avec VC ++ qui s’agrandit quand même pour L une fois compilé pour Unicode).

Autres conseils

La nouvelle norme C ++ 0x définit une autre manière de procéder:
http://fr.wikipedia.org/wiki/C%2B%2B0x#New_string_literals

sur une note connexe .. J'essaie de faire ce qui suit

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

qui est une macro le développera

get_switch(isrunning)

dans

myclass::getswitch(L"isrunning")

cela fonctionne très bien dans c ++ visualstudio 2008

mais quand je compile le même code sous mac Xcode (pour iphone), je reçois le message d'erreur:

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

EDIT: Solution

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

cela fonctionne à la fois sur vc ++ et sur xcode mac (gcc)

Pourquoi ne voulez-vous pas préfixer les littéraux de chaîne par un L? C'est assez simple - les chaînes sans L sont des chaînes ANSI ( const char * ), les chaînes avec un L sont des chaînes de caractères larges ( const wchar_t * ). Il existe la macro TEXT () , qui transforme un littéral de chaîne en ANSI ou une chaîne de caractères larges en fonction du projet en cours défini pour utiliser la commande Uncode:


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

Il existe également la macro _T () , équivalente à TEXT () .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top