Zuordnungen für generischen Text in tchar.h
Um die Codeübertragung für internationale Anwendungen zu vereinfachen, stellt die Microsoft-Laufzeitbibliothek Microsoft-spezifische Zuordnungen für generischen Text für viele Datentypen, Routinen und andere Objekte zur Verfügung. Mit diesen Zuordnungen, die in tchar.h definiert sind, können Sie generischen Code schreiben, der für Einzelbyte-, Mehrbyte- oder -Zeichensätze kompiliert werden kann, abhängig von einer eindeutigen Konstante, die Sie mithilfe einer #define
-Anweisung definieren. Generische Textzuordnungen sind Microsoft-Erweiterungen, die nicht mit ANSI kompatibel sind.
Mit tchar.h können Sie Einzelbyte-, MBCS- (Mehrbyte-Zeichensätze) und Unicode-Anwendungen aus denselben Quellen erstellen. Mit rchar.h werden Makros (mit dem Präfix _tcs
) definiert, die der Funktion str
, _mbs
oder wcs
zugeordnet werden, vorausgesetzt, die Präprozessordefinitionen sind richtig. Definieren Sie zur Erstellung von MBCS das _MBCS
-Symbol. Definieren Sie zur Erstellung von Unicode das _UNICODE
-Symbol. Um eine Einzelbyte-Anwendung zu erstellen, geben Sie nichts an (Standardeinstellung). Standardmäßig wird _UNICODE
für MFC-Anwendungen definiert.
Der _TCHAR
-Datentyp wird in tchar.h bedingt definiert. Wenn das _UNICODE
-Symbol für den jeweiligen Build definiert ist, wird _TCHAR
als wchar_t
definiert. Andernfalls (für Einzelbyte- und MBCS-Builds) wird er als char
definiert. (wchar_t
, der Unicode-Basisdatentyp für Breitzeichen, ist das 16-Bit-Gegenstück zum 8-Bit-Datentyp signed char
.) Verwenden Sie für internationale Anwendungen die _tcs
-Funktionsreihe, bei der anstelle von Bytes _TCHAR
-Einheiten verwendet werden. Beispiel: _tcsncpy
kopiert n
_TCHARs
, nicht n
Bytes.
Da für einige Funktionen zur Zeichenfolgenbehandlung bei Einzelbyte-Zeichensätzen (SBCS) char*
-Parameter (mit Vorzeichen) erforderlich sind, wird bei der Definition von _MBCS
eine Compiler-Warnung ausgegeben, die auf einen Typenkonflikt hinweist. Es gibt drei Möglichkeiten, diese Warnung zu vermeiden:
Verwenden Sie die typsicheren Inlinefunktionsthunks in tchar.h. Dies ist die Standardeinstellung.
Verwenden Sie die direkten Makros in tchar.h, indem Sie in der Befehlszeile
_MB_MAP_DIRECT
definieren. In diesem Fall müssen Sie die Typübereinstimmung manuell sicherstellen. Dies ist die schnellste Methode; sie ist jedoch nicht typsicher.Verwenden Sie die typsicheren statisch verknüpften Bibliotheksfunktionsthunks in tchar.h. Definieren Sie hierzu in der Befehlszeile die Konstante
_NO_INLINING
. Dies ist die langsamste Methode; sie bietet jedoch auch die größte Typsicherheit.
Präprozessordirektiven zum Zuordnen von generischem Text
#define | Kompilierte Version | Beispiel |
---|---|---|
_UNICODE |
Unicode (Breitzeichen) | _tcsrev ist _wcsrev zugeordnet. |
_MBCS |
Mehrbytezeichen | _tcsrev ist _mbsrev zugeordnet. |
Keine (bei der Standardeinstellung ist weder _UNICODE noch _MBCS definiert) |
SBCS (ASCII) | _tcsrev ist strrev zugeordnet. |
Die in tchar.h definierte generische Textfunktion _tcsrev
wird z. B. der _mbsrev
-Funktion zugeordnet, wenn Sie _MBCS
in einem Programm definiert haben, oder sie wird _wcsrev
zugeordnet, wenn Sie _UNICODE
definiert haben. Andernfalls wird _tcsrev
strrev
zugeordnet. Zur Vereinfachung der Programmierung werden in tchar.h weitere Datentypzuordnungen zur Verfügung gestellt; _TCHAR
ist jedoch die hilfreichste Zuordnung.
Generische Textzuordnungen von Datentypen
Generischer Text Datentypname |
_UNICODE & _MBCS nicht definiert |
_MBCS Definiert |
_UNICODE Definiert |
---|---|---|---|
_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 oder _TEXT |
Ohne Auswirkung (wird vom Präprozessor entfernt) | Ohne Auswirkung (wird vom Präprozessor entfernt) | L (konvertiert das nächste Zeichen oder die nächste Zeichenfolge in die Unicode-Entsprechung) |
Eine Liste mit generischen Textzuordnungen von Routinen, Variablen und anderen Objekten finden Sie unter Generische Textzuordnungen in der Laufzeitbibliotheksreferenz.
Hinweis
Verwenden Sie die str
-Funktionsreihe nicht mit Unicode-Zeichenfolgen, da diese wahrscheinlich eingebettete NULL-Bytes enthalten. Ebenso sollten Sie die wcs
-Funktionsreihe nicht mit Zeichenfolgen vom Typ MBCS (oder SBCS) verwenden.
Aus den folgenden Codefragmenten geht hervor, wie _TCHAR
und _tcsrev
für die Zuordnung zu den MBCS-, Unicode- und SBCS-Modellen verwendet werden.
_TCHAR *RetVal, *szString;
RetVal = _tcsrev(szString);
Wenn _MBCS
definiert wurde, ordnet der Präprozessor diesem Code folgenden Ausschnitt zu:
char *RetVal, *szString;
RetVal = _mbsrev(szString);
Wenn _UNICODE
definiert wurde, ordnet der Präprozessor diesem Code folgenden Ausschnitt zu:
wchar_t *RetVal, *szString;
RetVal = _wcsrev(szString);
Wenn weder _MBCS
noch _UNICODE
definiert wurde, ordnet der Präprozessor dem Einzelbyte-ASCII-Code das Fragment wie folgt zu:
char *RetVal, *szString;
RetVal = strrev(szString);
Folglich können Sie eine einzige Quellcodedatei so schreiben, verwalten und kompilieren, dass sie mit Routinen ausgeführt wird, die jeweils speziell auf einen der drei Zeichensätze ausgerichtet sind.
Weitere Informationen
Text und Zeichenfolgen
Verwenden von TCHAR.H-Datentypen in _MBCS-Code