Mappages de texte générique dans tchar.h
Pour simplifier le portage du code en vue d’une utilisation internationale, la bibliothèque runtime Microsoft fournit des correspondances 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é pour des jeux de caractères codés sur un octet, multioctets ou 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 non compatibles ANSI.
Avec le fichier d’en-tête tchar.h, vous pouvez créer des applications pour des jeux de caractères codés sur un octet, des jeux de caractères multioctets (MBCS) ou Unicode à partir des mêmes sources. tchar.h définit des macros (qui ont le préfixe _tcs
) qui, avec les définitions de préprocesseur correctes, mappent à des fonctions str
, _mbs
ou wcs
, selon ce qui est approprié. Pour générer pour MBCS, définissez le symbole_MBCS
. Pour générer pour Unicode, définissez le symbole _UNICODE
. Pour générer une application pour le codage sur un octet, ne définissez ni l’un ni l’autre (la valeur par défaut). Par défaut, _UNICODE
est défini pour les applications MFC.
Le type de données _TCHAR
est défini de manière conditionnelle dans tchar.h. Si le symbole _UNICODE
est défini pour votre build, _TCHAR
est défini en tant que wchar_t
; sinon, pour les builds pour le codage sur un octet et MBCS, il est défini en tant que char
. (wchar_t
, le type de données avec caractères larges Unicode de base, est l’équivalent 16 bits d’un caractère signed char
de 8 bits .) Pour les applications internationales, utilisez la famille de fonctions _tcs
, qui utilisent des unités _TCHAR
et non pas des octets. Par exemple, _tcsncpy
copie n
_TCHARs
et non pas n
octets.
Comme certaines fonctions de gestion des chaînes SBCS (jeu de caractères codés sur un octet) prennent des paramètres char*
(signés), un avertissement du compilateur indiquant une non-correspondance de type est généré quand _MBCS
est défini. Il existe trois façons d’éviter cet avertissement :
Utiliser les thunks de fonction inline de type sécurisé dans tchar.h. C’est le paramétrage par défaut.
Utiliser les macros directes dans tchar.h en définissant
_MB_MAP_DIRECT
sur la ligne de commande. Ce faisant, vous devez associer manuellement les types. Cette méthode est la plus rapide mais n’est pas de type sécurisé.Utiliser les thunks de fonction de bibliothèque liée statiquement de type sécurisée dans tchar.h. Pour cela, définissez la constante
_NO_INLINING
sur la ligne de commande. Cette méthode est la plus lente, mais la plus sécurisée pour le type.
Directives de préprocesseur pour les mappages de texte générique
# define | Version compilée | Exemple |
---|---|---|
_UNICODE |
Unicode (caractères larges) | _tcsrev est mappé à _wcsrev |
_MBCS |
Caractères multioctets | _tcsrev est mappé à _mbsrev |
Aucun (la valeur par défaut n’est définie ni sur _UNICODE ni sur _MBCS ) |
SBCS (ASCII) | _tcsrev est mappé à strrev |
Par exemple, la fonction de texte générique _tcsrev
, définie dans tchar.h, est mappée à _mbsrev
si vous avez défini _MBCS
dans votre programme, ou à _wcsrev
si vous avez défini _UNICODE
. Sinon, _tcsrev
est mappée à strrev
. D’autres mappages de type de données sont fournis dans tchar.h pour faciliter la programmation, mais _TCHAR
est le plus utile.
Mappages de types de données de texte générique
Texte générique Nom du type de données |
_UNICODE & _MBCS non défini |
_MBCS Défini |
_UNICODE Défini |
---|---|---|---|
_TCHAR |
char |
char |
wchar_t |
_TINT |
int |
unsigned int |
wint_t |
_TSCHAR |
signed char |
signed char |
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 qui suit en son équivalent Unicode) |
Pour obtenir une liste complète des mappages de texte générique de routines, variables et autres objets, consultez Mappages de texte générique dans les informations de référence sur la bibliothèque runtime.
Remarque
N’utilisez pas la famille de fonctions str
avec des chaînes Unicode, qui sont susceptibles de 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 illustrent l’utilisation de _TCHAR
et _tcsrev
pour le mappage sur les modèles MBCS, Unicode et SBCS.
_TCHAR *RetVal, *szString;
RetVal = _tcsrev(szString);
Si _MBCS
a été défini, le préprocesseur mappe ce fragment à ce code :
char *RetVal, *szString;
RetVal = _mbsrev(szString);
Si _UNICODE
a été défini, le préprocesseur mappe ce fragment à ce code :
wchar_t *RetVal, *szString;
RetVal = _wcsrev(szString);
Si ni _MBCS
ni _UNICODE
n’ont été définis, le préprocesseur mappe le fragment à un code ASCII sur un seul octet, comme suit :
char *RetVal, *szString;
RetVal = strrev(szString);
Par conséquent, vous pouvez écrire, maintenir et compiler un fichier de code source unique à exécuter avec des routines qui sont spécifiques à un des trois types de jeu de caractères.
Voir aussi
Texte et chaînes
Utilisation de types de données TCHAR.H avec _MBCS