Utilizzo di mapping testo generico
Sezione specifica Microsoft
Allo scopo di semplificare lo sviluppo di codice per diversi mercati internazionali, la libreria di runtime di Microsoft fornisce mappature di testo generico specifiche di Microsoft per molti tipi di dati, routine e altri oggetti. I mapping sono definiti in TCHAR.H. È possibile utilizzare questi mapping di nomi per produrre codice generico che può essere compilato per uno qualsiasi dei tre tipi di set di caratteri: ASCII (SBCS), MBCS, o Unicode, a seconda di una costante di manifesto definita utilizzando un'istruzione #define. Le mappature di testo generico sono estensioni Microsoft non compatibili con lo standard ANSI.
Istruzioni del preprocessore per le mappature di testo generico
#define |
Versione compilata |
Esempio |
---|---|---|
_UNICODE |
Unicode (caratteri wide) |
_tcsrev corrisponde a _wcsrev |
_MBCS |
Caratteri multibyte |
_tcsrev corrisponde a _mbsrev |
Nessuna definizione. Questa è l'impostazione predefinita: non viene definito né _UNICODE né _MBCS. |
SBCS (ASCII) |
Viene eseguito il mapping dell'oggetto _tcsrev in strrev. |
Ad esempio, la funzione di testo generico _tcsrev, che è definita in TCHAR.H, corrisponde a mbsrev se nel programma è stato definito MBCS oppure a _wcsrev se è stato definito _UNICODE . In caso contrario, viene eseguito il mapping di _tcsrev in strrev.
Il tipo di dati di testo generico _TCHAR, anche definito in TCHAR.H, viene mappato nel tipo char se _MBCS è definito, nel tipo wchar_t se _UNICODE è definito e nel tipo char se nessuna delle due costanti è definita. Per facilitare la programmazione, vengono fornite in TCHAR.H altre mappature di tipi di dati, ma _TCHAR è il tipo più utile.
Mappature di tipi di dati di testo generico
Mappature di tipi di dati di testo generico |
SBCS (_UNICODE, _MBCS non definito) |
_MBCS definito |
_UNICODE definito |
---|---|---|---|
_TCHAR |
char |
char |
wchar_t |
_TINT |
int |
int |
wint_t |
_TSCHAR |
signed char |
signed char |
wchar_t |
_TUCHAR |
unsigned char |
unsigned char |
wchar_t |
_TXCHAR |
char |
unsigned char |
wchar_t |
_T o _TEXT |
Nessun effetto (eliminato dal preprocessore) |
Nessun effetto (eliminato dal preprocessore) |
L (converte il carattere o la stringa seguente nell'equivalente Unicode) |
Per un elenco completo delle mappature di testo generico di routine, variabili e altri oggetti, vedere Mappature di testo generico.
Nei seguenti frammenti di codice viene illustrato l'utilizzo di _TCHAR e _tcsrev per impostare mappature con modelli MBSC, Unicode e SBCS.
_TCHAR *RetVal, *szString;
RetVal = _tcsrev(szString);
Se MBCS è stato definito, il preprocessore esegue il mapping del frammento precedente nel codice seguente:
char *RetVal, *szString;
RetVal = _mbsrev(szString);
Se _UNICODE è stato definito, il preprocessore esegue il mapping dello stesso frammento nel codice seguente:
wchar_t *RetVal, *szString;
RetVal = _wcsrev(szString);
Se non è stato definito né _MBCS né _UNICODE, il preprocessore tradurrà il codice in modo da utilizzare il codice ASCII a byte singolo come segue:
char *RetVal, *szString;
RetVal = strrev(szString);
Di conseguenza, è possibile scrivere, gestire e compilare un unico file di codice sorgente per eseguirlo con routine specifiche per uno dei tre tipi di set di caratteri.
Fine sezione specifica Microsoft