_MBCS Kodu ile TCHAR.H Veri Türünü Kullanma
Bildirim sabiti _MBCS tanımlandığında, genel bir metin yordam aşağıdaki yordam çeşitlerinden biriyle eşlenir:
Çok baytlı baytları, karakterleri ve dizeleri uygun şekilde işleyen bir SBCS yordamı. Bu durumda, dize bağımsız değişkenlerinin char * türünden olması beklenir. Örneğin, _tprintf printf ile eşlenir; dize bağımsız değişkenleri printf char * türündendir. Dizi türleriniz için _TCHAR genel metin veri türünü kullanırsanız, printf öğesinin biçimsel ve gerçek parametre türleri**_TCHAR*** öğesi char * öğesine eşleneceğinden eşleşir.
MBCS'ye özgü yordam. Bu durumda dize bağımsız değişkenlerinin unsigned char* türü olması beklenir. Örneğin, _tcsrev _mbsrev ile eşlenir, bu da unsignedchar * türü bir dize bekler ve döndürür. Dizi türleriniz için _TCHAR genel metin veri türleri kullanırsanız _TCHAR öğesi char türüyle eşleşeceğinden çakışma olasılığı bulunur.
Aşağıdakiler bu tür çakışmayı (ve ortaya çıkabilecek C derleyici uyarıları veya C++ uyarıcı hatalarını) önlemek için kullanılan üç çözümdür:
Varsayılan davranışı kullanın. Tchar.h, aşağıdaki örnekte olduğu gibi çalışma süresi kütüphanelerindeki rutinler için kapsamlı metin rutini prototipleri sağlar.
char * _tcsrev(char *);
Varsayılan durumda, _tcsrev öğesinin prototipi _mbsrev öğesine Libc.lib dönüştürücüsü aracılığıyla eşler. Bu _mbsrev gelen parametrelerini ve _TCHAR * öğesinden giden dönüş değerini (ki bu char * öğesidir) unsigned char * öğesine dönüştürür. Bu yöntem _TCHAR kullanırken tür eşleşmesi sağlar, fakat işlev çağırma yükünden dolayı nispeten daha yavaştır.
Aşağıdaki önişlemci deyimi kodunuza katıştırarak işlevi satır içi hale getirmeyi kullanın.
#define _USE_INLINING
Bu yöntem Tchar.h içinde sunulmuş, genel metin yordamını doğrudan uygun MBCS yordamıyla eşleyen bir satır içi işlev dönüştürücüsüne sebep olur. Tchar.h'dan alıntı olan aşağıdaki kod bunun nasıl yapıldığına dair bir örnek sağlar.
__inline char *_tcsrev(char *_s1) {return (char *)_mbsrev((unsigned char *)_s1);}
Satır içi kullanabiliyorsanız, tür eşleşmesini garantileyeceğinden ve ek zaman istemeyeceğinden bu en iyi çözümdür.
Aşağıdaki önişlemci deyimi kodunuza katıştırarak doğrudan eşleme kullanın.
#define _MB_MAP_DIRECT
Varsayılan davranışı kullanmak istemiyorsanız veya satır içini kullanamıyorsanız, bu yaklaşım hızlı bir alternatif sağlar. Aşağıdaki Tchar.h örneğinde olduğu gibi, genel metin yordamının, yordamın MBCS sürümüne doğrudan bir makro tarafından işlenmesini sağlar.
#define _tcschr _mbschr
Bu yaklaşımı seçtiğinizde, dize değişkenleri ve dize geri dönüş değerleri için uygun veri türlerinin kullanıldığına dikkat etmelisiniz. Uygun tür eşleşmesini sağlamak için tür atamayı ya da _TXCHAR genel metin veri türünü kullanabilirsiniz. _TXCHAR, SBCS kodunda char yazmak için eşlenirken MBCS kodunda unsigned char yazmak için eşlenir. Genel metin makroları hakkında daha fazla bilgi için Çalışma Zamanı Kitaplığı Başvurusu içinde Genel Metin Eşlemeleri bölümüne bakın.