Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Při definování konstanty _MBCS manifestu se daná rutina obecného textu mapuje na jeden z následujících typů rutin:
Rutina SBCS, která odpovídajícím způsobem zpracovává vícebajtové bajty, znaky a řetězce. V tomto případě se očekává, že řetězcové argumenty budou typu
char*. Například_tprintfse mapuje naprintf; řetězcové argumenty, kteréprintfmají být typuchar*. Pokud pro typy řetězců použijete_TCHARdatový typ obecný-text, formální a skutečné typy parametrů proprintfshodu, protože_TCHAR*se mapuje nachar*.Rutina specifická pro MBCS. V tomto případě se očekává, že řetězcové argumenty budou typu
unsigned char*. Například mapuje na_tcsrev_mbsrev, který očekává a vrací řetězec typuunsigned char*. Pokud pro typy řetězců používáte_TCHARdatový typ obecný-text, je možné konflikt typu, protože_TCHARse mapuje na typchar.
Následují tři řešení, která brání konfliktu tohoto typu (a upozornění kompilátoru jazyka C nebo chyby kompilátoru jazyka C++, které by to vedlo):
Použijte výchozí chování. tchar.h poskytuje prototypy rutin obecného textu pro rutiny v knihovnách za běhu, jak je znázorněno v následujícím příkladu.
char * _tcsrev(char *);Ve výchozím případě prototyp mapuje
_tcsrev_mbsrevpřes blok v knihovně Libc.lib. Tím se změní typy příchozích_mbsrevparametrů a odchozí návratová hodnota z_TCHAR*(tjchar *. ) naunsigned char *. Tato metoda zajišťuje porovnávání typů při použití_TCHAR, ale je relativně pomalé kvůli režii volání funkce.Funkci inlining použijte zahrnutím následujícího příkazu preprocesoru do kódu.
#define _USE_INLININGTato metoda způsobí, že vložená funkce tchar.h, mapuje rutinu obecného textu přímo na příslušnou rutinu MBCS. Následující výňatek kódu z tchar.h poskytuje příklad toho, jak se to dělá.
__inline char *_tcsrev(char *_s1) {return (char *)_mbsrev((unsigned char *)_s1);}Pokud můžete použít vkládání, je to nejlepší řešení, protože zaručuje porovnávání typů a nemá žádné další časové náklady.
Přímé mapování použijte zahrnutím následujícího příkazu preprocesoru do kódu.
#define _MB_MAP_DIRECTTento přístup poskytuje rychlou alternativu, pokud nechcete používat výchozí chování nebo nemůžete použít inlining. Způsobí, že makro mapuje rutinu obecného textu přímo na verzi rutiny MBCS, jak je znázorněno v následujícím příkladu z tchar.h.
#define _tcschr _mbschrPři použití tohoto přístupu musíte být opatrní, abyste zajistili použití vhodných datových typů pro řetězcové argumenty a návratové hodnoty řetězců. Přetypování typů můžete použít k zajištění správného porovnávání typů nebo můžete použít
_TXCHARdatový typ obecného textu._TXCHARmapuje typcharv kódu SBCS, ale mapuje se na typunsigned charv kódu MBCS. Další informace o obecných textovýchmakch