Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
För att förenkla transporten av kod för internationell användning tillhandahåller Microsofts run-time-bibliotek Microsoft-specifika generiska textmappningar för många datatyper, rutiner och andra objekt. Du kan använda dessa mappningar, som definieras i tchar.h, för att skriva allmän kod som kan kompileras för enstaka byte, flerabyte eller Unicode-teckenuppsättningar, beroende på en manifestkonstant som du definierar med hjälp av en #define instruktion. Mappningar med allmän text är Microsoft-tillägg som inte är ANSI-kompatibla.
Med hjälp av tchar.h kan du skapa MBCS-program (Single Byte, Multibyte Character Set) och Unicode från samma källor. tchar.h definierar makron (som har prefixet _tcs) som, med rätt preprocessordefinitioner, mappar till str, _mbseller wcs funktioner efter behov. Om du vill skapa MBCS definierar du symbolen _MBCS. Om du vill skapa Unicode definierar du symbolen _UNICODE. Om du vill skapa ett program med en enda byte definierar du inget av dem (standard). Som standard _UNICODE definieras för MFC-program.
Datatypen _TCHAR definieras villkorligt i tchar.h. Om symbolen _UNICODE har definierats för din version definieras _TCHAR som wchar_t; annars, för enbyte- och MBCS-versioner, definieras den som char. (wchar_t den grundläggande Unicode-datatypen med breda tecken är motsvarigheten till en 8-bitars signed char.) För internationella program använder du familjen av funktioner _tcs, som arbetar i _TCHAR-enheter, inte byte. Till exempel _tcsncpy kopierar n_TCHARs, inte n byte.
Eftersom vissa stränghanteringsfunktioner för Single Byte Character Set (SBCS) tar (signerade) char* parametrar, uppstår en kompilatorvarning för typmismatch när _MBCS är definierad. Det finns tre sätt att undvika den här varningen:
Använd typsäkra inline-thunks i tchar.h. Det här är standardbeteendet.
Använd de direkta makrona i tchar.h genom att
_MB_MAP_DIRECTdefiniera på kommandoraden. Om du gör detta måste du matcha typer manuellt. Det här är den snabbaste metoden, men är inte typsäker.Använd den statiskt länkade biblioteksfunktionen type-safe thunks i tchar.h. Det gör du genom att definiera konstanten
_NO_INLININGpå kommandoraden. Det här är den långsammaste metoden, men den mest typsäkra.
Förprocessordirektiv för Generic-Text mappningar
| # definiera | Kompilerad version | Exempel |
|---|---|---|
_UNICODE |
Unicode (brett tecken) |
_tcsrev mappar till _wcsrev |
_MBCS |
Flerbytestecken |
_tcsrev mappar till _mbsrev |
Inget (standardinställningen har varken _UNICODE eller _MBCS definierats) |
SBCS (ASCII) |
_tcsrev mappar till strrev |
Till exempel den generiska textfunktionen _tcsrev, som definieras i tchar.h, mappar till _mbsrev om du har definierat _MBCS i ditt program eller till _wcsrev om du har definierat _UNICODE. Annars _tcsrev mappas till strrev. Andra datatypsmappningar tillhandahålls i tchar.h för att underlätta programmeringen, men _TCHAR är det mest användbara.
Generic-Text datatypsmappningar
| Generic-Text Namn på datatyp |
_UNICODE & _MBCS inte definierad |
_MBCS Definierad |
_UNICODE Definierad |
|---|---|---|---|
_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 eller _TEXT |
Ingen effekt (tas bort av förprocessorn) | Ingen effekt (tas bort av förprocessorn) |
L (konverterar följande tecken eller sträng till dess Unicode-motsvarighet) |
En lista över allmän textmappningar av rutiner, variabler och andra objekt finns iGeneric-Text Mappningar i Run-Time-biblioteksreferensen.
Anmärkning
Använd inte serien str med funktioner med Unicode-strängar, som sannolikt kommer att innehålla inbäddade null-byte. På samma sätt ska du inte använda wcs serien med funktioner med MBCS-strängar (eller SBCS).
Följande kodfragment illustrerar användningen av _TCHAR och _tcsrev för mappning till MBCS-, Unicode- och SBCS-modellerna.
_TCHAR *RetVal, *szString;
RetVal = _tcsrev(szString);
Om _MBCS har definierats mappar förprocessorn det här fragmentet till den här koden:
char *RetVal, *szString;
RetVal = _mbsrev(szString);
Om _UNICODE har definierats mappar förprocessorn det här fragmentet till den här koden:
wchar_t *RetVal, *szString;
RetVal = _wcsrev(szString);
Om varken _MBCS eller _UNICODE har definierats mappar förprocessorn fragmentet till ASCII-kod med en enda bytes, enligt följande:
char *RetVal, *szString;
RetVal = strrev(szString);
Därför kan du skriva, underhålla och kompilera en kodfil med en enda källkod som ska köras med rutiner som är specifika för någon av de tre typerna av teckenuppsättningar.