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:

  1. Użyj thunks funkcji wbudowany typ palety w Tchar.h.Jest to zachowanie domyślne.

  2. 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.

  3. 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.

Zobacz też

Koncepcje

Tekstem i ciągami znaków w języku Visual C++

Za pomocą TCHAR.Typy danych h z kodem _MBCS