Partager via


Mappages de texte générique dans Tchar.h

Mise à jour : novembre 2007

Pour faciliter le transport de code pour une utilisation internationale, la bibliothèque Runtime Microsoft fournit des mappages de texte générique spécifiques à Microsoft pour de nombreux types de données, routines et autres objets. Vous pouvez utiliser ces mappages, qui sont définis dans Tchar.h, pour écrire du code générique qui peut être compilé sur un octet, sur plusieurs octets ou en Unicode, en fonction d'une constante de manifeste que vous définissez en utilisant une instruction #define. Les mappages de texte générique sont des extensions Microsoft qui ne sont pas compatibles ANSI.

En utilisant le fichier d'en-tête Tchar.h, vous pouvez générer des applications codées sur un octet, MBCS et Unicode à partir des mêmes sources. Tchar.h définit des macros préfixées avec _tcs, qui correspondent à la fonction str, _mbs ou wcs, selon les besoins et avec les définitions de préprocesseur correctes. Pour générer du MBCS, définissez le symbole _MBCS. Pour générer du Unicode, définissez le symbole _UNICODE. Pour générer une application codée sur un octet, ne définissez rien (valeur par défaut). Par défaut, _MBCS est défini pour les applications MFC.

Le type de données _TCHAR est défini de façon conditionnelle dans Tchar.h. Si le symbole _UNICODE est défini pour votre génération, _TCHAR est défini sous la forme wchar_t ; dans le cas contraire, pour les générations codées sur un octet et MBCS, il est défini en tant que char. ((wchar_t, le type de données à caractère élargi Unicode de base, est l'équivalent 16 bits d'un char 8 bits signés.) Pour des applications internationales, utilisez la famille de fonctions _tcs, qui fonctionne en unités _TCHAR et non en octets. Par exemple, _tcsncpy copie n**_TCHAR**s, et non n octets.

Dans la mesure où certaines fonctions de gestion de chaîne SBCS utilisent des paramètres char* (signés), un avertissement du compilateur d'incompatibilité de type se produit lors de la définition de _MBCS. Vous trouverez ci-dessous les trois méthodes pouvant être utilisées pour éviter l'affichage de cet avertissement, selon leur efficacité :

  1. Utilisez les thunks de la fonction inline « type-safe » dans Tchar.h. C'est le comportement par défaut.

  2. Utilisez les macros directes dans Tchar.h en définissant _MB_MAP_DIRECT sur la ligne de commande. Si vous utilisez ces macros, vous devez faire correspondre les types manuellement. Il s'agit de la méthode la plus sûre, mais elle n'est pas type-safe.

  3. Utilisez les thunks de la fonction de bibliothèque liée statiquement type-safe dans Tchar.h. Pour cela, définissez la constante _NO_INLINING sur la ligne de commande. Il s'agit de la méthode la plus lente, mais la plus type-safe.

Directives du préprocesseur pour les mappages de texte générique

# define

Version compilée

Exemple

_UNICODE

Unicode (caractère élargi)

_tcsrev correspond à _wcsrev

_MBCS

Caractère multioctets

_tcsrev correspond à _mbsrev

Aucun (valeur par défaut : _UNICODE et _MBCS non défini)

SBCS (ASCII)

_tcsrev correspond à strrev

Par exemple, la fonction de texte générique _tcsrev, définie dans Tchar.h, correspond à _mbsrev si vous définissez _MBCS dans votre programme ou à _wcsrev si vous définissez _UNICODE. Dans le cas contraire, _tcsrev correspond à strrev. Pour des besoins de programmation, Tchar.h fournit d'autres mappages de type de données, mais _TCHAR est le plus utile.

Mappages de types de données de texte générique

Texte de générique

Nom du type de données

_UNICODE &

Non défini par _UNICODE & _MBCS

_MBCS

(défini par)

_UNICODE

(défini par)

_TCHAR

char

char

wchar_t

_TINT

int

int

wint_t

_TSCHAR

char signed

char signed

wchar_t

_TUCHAR

unsigned char

unsigned char

wchar_t

_TXCHAR

char

unsigned char

wchar_t

_T ou _TEXT

Aucun effet (supprimé par le préprocesseur)

Aucun effet (supprimé par le préprocesseur)

L (convertit le caractère ou la chaîne suivant(e) en son équivalent Unicode)

Pour obtenir une liste complète des mappages de texte générique des routines, variables et autres objets, consultez Mappages de texte générique dans la référence de la bibliothèque Runtime.

Remarque :

N'utilisez pas la famille de fonctions str avec des chaînes Unicode, qui peuvent contenir des octets null incorporés. De même, n'utilisez pas la famille de fonctions wcs avec des chaînes MBCS (ou SBCS).

Les fragments de code suivants montrent comment utiliser _TCHAR et _tcsrev pour le mappage en modèles MBCS, Unicode et SBCS.

_TCHAR *RetVal, *szString;
RetVal = _tcsrev(szString);

Si _MBCS a été défini, le préprocesseur mappe ce fragment en code :

char *RetVal, *szString;
RetVal = _mbsrev(szString);

Si _UNICODE a été défini, le préprocesseur mappe ce fragment en code :

wchar_t *RetVal, *szString;
RetVal = _wcsrev(szString);

Si ni _MBCS ni _UNICODE n'ont été définis, le préprocesseur mappe ce fragment en code ASCII codé sur un octet :

char *RetVal, *szString;
RetVal = strrev(szString);

Vous pouvez écrire, maintenir et compiler un unique fichier de code source à exécuter avec des routines qui sont spécifiques à ces trois types de jeux de caractères.

Voir aussi

Concepts

Jeux de caractères en C++

Utilisation de types de données TCHAR.H avec _MBCS