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
, _mbs
eller 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_DIRECT
definiera 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_INLINING
på 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.