Come usare letterali a stringa larga in c ++ senza mettere L davanti a ciascuno di essi

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

  •  06-07-2019
  •  | 
  •  

Domanda

Dovrai perdonare la mia ignoranza, ma non sono abituato a usare ampi set di caratteri in c ++, ma c'è un modo in cui posso usare letterali a stringa larga in c ++ senza mettere una L davanti a ogni letterale?

In tal caso, come?

È stato utile?

Soluzione

No, non c'è. Devi usare il prefisso L (o una macro come _T () con VC ++ che si espande in L comunque quando compilato per Unicode).

Altri suggerimenti

Il nuovo standard C ++ 0x definisce un altro modo per farlo:
http://en.wikipedia.org/wiki/C%2B%2B0x#New_string_literals

su una nota correlata .. sto cercando di fare quanto segue

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

che è una macro che verrà espansa

get_switch(isrunning)

in

myclass::getswitch(L"isrunning")

funziona perfettamente in c ++ visualstudio 2008

ma quando compilo lo stesso codice in mac Xcode (per iPhone) ottengo l'errore:

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

EDIT: soluzione

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

funziona sia su vc ++ che su mac xcode (gcc)

Perché non vuoi anteporre i letterali di stringa con una L? È abbastanza semplice: le stringhe senza L sono stringhe ANSI ( const char * ), le stringhe con una L sono stringhe di caratteri ampi ( const wchar_t * ). Esiste la macro TEXT () , che rende letterale una stringa in un ANSI o una stringa di caratteri grandi a seconda del progetto corrente è impostata per utilizzare Uncode:


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

C'è anche la macro _T () , che equivale a TEXT () .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top