Tekst rodzajowy mapowania w Tchar.h
Uproszczenie przewozu kodu do użytku międzynarodowego, Microsoft run-time library zawiera Microsoft-określonego mapowania tekst rodzajowy dla wielu typów danych, procedur i inne obiekty.Można użyć tych mapowań, które są zdefiniowane w Tchar.h, aby napisać kod rodzajowy, które mogą być tworzone dla jednobajtowe, wielobajtowych, lub Unicode znaków zestawów, w zależności od manifestu stała zdefiniować za pomocą #define instrukcji.Tekst rodzajowy mapowania są Microsoft rozszerzeń, które nie są ANSI zgodne.
Za pomocą Tchar.h, można zbudować jednobajtowe, wielobajtowych znaków ustawić (MBCS), i Unicode wnioski z tych samych źródeł.TCHAR.h definiuje makra (które mają prefiks _tcs), z poprawną definicje preprocesora, odpowiadające str, _mbs, lub wcs funkcje, jak właściwe.Aby zbudować MBCS, zdefiniuj symbol _MBCS.Tworzenie Unicode, zdefiniowanie symbolu _UNICODE.Aby zbudować aplikację jednobajtowe, zdefiniuj ani (domyślnie).Domyślnie _MBCS jest zdefiniowany dla aplikacji MFC.
_TCHAR Typ danych jest warunkowo zdefiniowany w Tchar.h.Jeśli symbol _UNICODE jest zdefiniowany dla budowania, _TCHAR jest zdefiniowana jako wchar_t; w przeciwnym razie jednobajtowe i kompilacje MBCS jest zdefiniowana jako char.(wchar_t, podstawowy typ danych szerokich znaków Unicode jest odpowiednikiem 8-bitowym podpisany 16-bitowe char.) W aplikacjach międzynarodowych, użyj _tcs rodziny funkcji, które działają w _TCHAR jednostek, nie bajtów.For example, _tcsncpy copies n_TCHARs, not n bytes.
Ponieważ niektóre pojedynczy bajt znaku ustawić (SBCS) ciąg obsługi funkcji odbioru (podpisane) char* parametrów, typ spowoduje ostrzeżenia kompilatora niezgodność po _MBCS jest zdefiniowany.Aby uniknąć tego ostrzeżenia na trzy sposoby:
Użyj thunks funkcji wbudowany typ palety w Tchar.h.Jest to zachowanie domyślne.
Użyj bezpośredniego makra w Tchar.h przez definiowanie _MB_MAP_DIRECT w wierszu polecenia.Jeśli to zrobisz, musi ręcznie dopasować typy.Jest to najszybsza metoda, ale nie jest typu palety.
Użyj thunks funkcji biblioteki statycznie typ palety w Tchar.h.W tym celu należy zdefiniować stałą _NO_INLINING w wierszu polecenia.Jest to metoda najwolniejszy, ale najbardziej typ palety.
Dyrektywy preprocesora dla mapowań tekst rodzajowy
# define |
Skompilowanej wersji |
Przykład |
---|---|---|
_UNICODE |
Unicode(szerokich znaków) |
_tcsrevmapuje_wcsrev |
_MBCS |
Znaków wielobajtowych |
_tcsrevmapuje_mbsrev |
Brak (domyślnie nie ma _UNICODE ani _MBCS zdefiniowane) |
SBCS (ASCII) |
_tcsrevmapujestrrev |
Na przykład funkcja generic text _tcsrev, który jest zdefiniowany w Tchar.h, mapy do _mbsrev Jeśli zdefiniowane _MBCS w programie lub do _wcsrev Jeśli zdefiniowane _UNICODE.Otherwise, _tcsrev maps to strrev.Inne mapowania typu danych znajdują się w Tchar.h w celu ułatwienia programowania, ale _TCHAR jest najbardziej użyteczna.
Mapowania typu danych tekst rodzajowy
Tekst rodzajowy Nazwa typu danych |
_UNICODE & Nie zdefiniowano _MBCS |
_MBCS Definicja |
_UNICODE Definicja |
---|---|---|---|
_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 |
_Tlub_TEXT |
Brak efektu (usunięta przez preprocessor) |
Brak efektu (usunięta przez preprocessor) |
L(konwertuje następujący znak lub ciąg do jego Unicode odpowiednikiem) |
Listę mapowań tekst rodzajowy procedur, zmiennych i innych obiektów, zobacz Tekst rodzajowy mapowania w Run-Time Library Reference.
[!UWAGA]
Nie należy używać str rodziny funkcji z ciągami znaków Unicode, które mogą zawierać osadzone bajty zerowe.Podobnie, nie należy używać wcs rodziny funkcji z ciągami MBCS (lub SBCS).
Następujące fragmenty kodu ilustrują użycie _TCHAR i _tcsrev do mapowania do MBCS, Unicodei SBCS modeli.
_TCHAR *RetVal, *szString;
RetVal = _tcsrev(szString);
Jeśli _MBCS została zdefiniowana, preprocesora mapuje ten fragment kodu:
char *RetVal, *szString;
RetVal = _mbsrev(szString);
Jeśli _UNICODE została zdefiniowana, preprocesora mapuje ten fragment kodu:
wchar_t *RetVal, *szString;
RetVal = _wcsrev(szString);
Jeśli ani _MBCS ani _UNICODE zostały zdefiniowane, preprocesora mapuje fragment jednobajtowe ASCII kod w następujący sposób:
char *RetVal, *szString;
RetVal = strrev(szString);
W związku z tym można napisać, utrzymania i skompiluj plik pojedynczego źródła kodu do uruchomienia z procedur, które są specyficzne dla żadnego z trzech rodzajów zestawów znaków.