Zuordnungen für generischen Text in tchar.h
Zur Vereinfachung des Transports von Code für die internationale Verwendung stellt die Microsoft-Laufzeitbibliothek microsoftspezifische generische Textzuordnungen für viele Datentypen, Routinen und andere Objekte bereit. Sie können diese Zuordnungen verwenden, die in tchar.h definiert sind, um generischen Code zu schreiben, der für Einzelne-Byte-, Multibyte- oder Unicode-Zeichensätze kompiliert werden kann, abhängig von einer Manifestkonstante, die Sie mithilfe einer #define
Anweisung definieren. Generische Textzuordnungen sind Microsoft-Erweiterungen, die nicht mit ANSI kompatibel sind.
Mithilfe von tchar.h können Sie Einzelbyte-, Multibyte-Zeichensatz (MBCS) und Unicode-Anwendungen aus denselben Quellen erstellen. tchar.h definiert Makros (die das Präfix _tcs
haben), die entsprechend den korrekten Präprozessordefinitionen, str
_mbs
zuordnungen oder Funktionen zugeordnet sindwcs
. Definieren Sie zur Erstellung von MBCS das _MBCS
-Symbol. Um Unicode zu erstellen, definieren Sie das Symbol _UNICODE
. Um eine Einzelbyte-Anwendung zu erstellen, geben Sie nichts an (Standardeinstellung). Standardmäßig wird _UNICODE
für MFC-Anwendungen definiert.
Der _TCHAR
Datentyp wird bedingt in tchar.h definiert. Wenn das Symbol _UNICODE
für Ihren Build definiert ist, _TCHAR
wird es als wchar_t
definiert; andernfalls wird es für Einzelbyte- und MBCS-Builds als char
definiert. (wchar_t
Der grundlegende Unicode-Breitzeichendatentyp ist das 16-Bit-Gegenstück zu einer 8-Bit-Version signed char
.) Verwenden Sie für internationale Anwendungen die _tcs
Familie der Funktionen, die in Einheiten und nicht in _TCHAR
Byte funktionieren. Kopiert z. B. _tcsncpy
n
_TCHARs
nicht n
Byte.
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 typsichere Inlinefunktion thunks in tchar.h. Dies ist die Standardeinstellung.
Verwenden Sie die direkten Makros in tchar.h, indem Sie in der Befehlszeile definieren
_MB_MAP_DIRECT
. In diesem Fall müssen Sie die Typübereinstimmung manuell sicherstellen. Dies ist die schnellste Methode; sie ist jedoch nicht typsicher.Verwenden Sie die typsichere statisch verknüpfte Bibliotheksfunktion thunks 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 generische Textfunktion _tcsrev
, die in tchar.h definiert ist, ordnet z. B. zu _mbsrev
, wenn Sie in Ihrem Programm definiert _MBCS
sind, oder _wcsrev
ob Sie definiert sind _UNICODE
. Andernfalls wird _tcsrev
strrev
zugeordnet. Andere Datentypzuordnungen werden in tchar.h zur Programmierfreundlichkeit bereitgestellt, sind aber _TCHAR
am nützlichsten.
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 folgende Zeichen oder die folgende Zeichenfolge in sein Unicode-Gegenstück) |
Eine Liste der generischen Textzuordnungen von Routinen, Variablen und anderen Objekten finden Sie unter Generic-Text Mappings 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
_UNICODE
noch definiert wurden, ordnet der Präprozessor das Fragment wie folgt einem ASCII-Code mit einem Byte 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.
Siehe auch
Text und Zeichenfolgen
Verwenden von TCHAR.H-Datentypen in _MBCS-Code
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für