Genel metin eşleştirme Tchar.h
Uluslararası kullanımda kodun taşınmasını kolaylaştırmak için Microsoft çalıştırma anı kitaplığı Microsoft'a özel bir çok veri türü, yordamlar ve diğer nesneler için genel metin eşlemesi sağlar. #define deyimi kullanarak tanımladığınız bildirim sabitine göre tek bayt, çoklu bayt veya Unicode karakter kümesi için derlenebilen genel kodlar yazmak için Tchar.h'ta tanımlanan eşlemeleri kullanabilirsiniz. Genel metin eşlemeleri ANSI uyumlu olmayan Microsoft uzantılarıdır.
Tchar.h'ı kullanarak aynı kaynaktan tek baytlı, Çok Baytlı Karakter Kümesi (MBCS) ve Unicode uygulamaları oluşturabilirsiniz. Tchar.h, doğru önişlemci tanımlarıyla, uygun olan str, _mbs veya wcs işlevlerine eşleme yapan makrolar (_tcs öneki olan) tanımlar. MBCS oluşturmak için _MBCS sembolünü tanımlayın. Unicode'u oluşturmak için _UNICODE sembolünü tanımlayın. Tek baytlı uygulama oluşturmak için ikisini de tanımlamayın (varsayılan). MFC uygulamaları için _MBCS varsayılan olarak tanımlanmıştır.
_TCHAR veri türü Tchar.h'ta koşullu olarak tanımlanmıştır. _UNICODE sembolü yapınızda tanımlanmışsa, _TCHAR wchar_t olarak tanımlanmıştır, diğer durumlarda, tek baytlı ve MBCS yapılarda, char olarak tanımlanmıştır. (8-bit işaretli char'a karşılık wchar_t, temel Unicode geniş karakter veri türü 16-bittir.) Uluslararası uygulamalar için bayt biriminde olmayan _TCHAR biriminde çalışan _tcs işlev ailesini kullanın. Örneğin, _tcsncpy n bayt yerine n _TCHARs'ı kopyalar.
Bazı Tek Baytlı Karakter Seti (SBCS) dize işleme işlevleri (işaretli) char* parametresi aldığından, _MBCS tanımlandığında tür uyuşmazlığı derleyici uyarısı oluşur. Bu uyarıyı önlemek için üç yol vardır:
Tchar.h'taki tür kullanımı uyumlu satır içi işlev dönüştürücüleri kullanın. Varsayılan davranış budur.
Komut satırında _MB_MAP_DIRECT'i tanımlayarak, Tchar.h'taki aktarmasız makroları kullanın. Bunu yaparsanız, türleri el ile eşleştirmelisiniz. Bu en hızlı yöntemdir fakat tür kullanımı uyumlu değildir.
Tchar.h'taki tür kullanımı uyumlu statik olarak bağlanmış kitaplık işlev dönüştürücüleri kullanın. Bunu yapmak için, komut satırında _NO_INLINING sabitini tanımlayın. Bu en yavaş yöntemdir fakat tür kullanımı uyumluluğu en yüksektir.
Genel Metin Eşlemeleri İçin Önişlemci Yönergeleri
# define |
Derlenmiş sürüm |
Örnek |
---|---|---|
_UNICODE |
Unicode (geniş karakter) |
_tcsrev, _wcsrev'ya eşlenir |
_MBCS |
Çok baytlı karakter |
_tcsrev, _mbsrev'ya eşlenir |
Hiçbiri (varsayılanda ne _UNICODE ne de _MBCS tanımlı değildir) |
SBCS (ASCII) |
_tcsrev, strrev'ya eşlenir |
Örneğin, programınızda _MBCS tanımladıysanız Tchar.h'ta tanımlı olan genel metin işlevi _tcsrev _mbsrev'e eşler veya programınızda _UNICODE tanımladıysanız _wcsrev'e eşler. Diğer durumda, _tcsrev'iyi strrev'e eşler. Diğer veri türü eşlemeleri programlama kolaylığı için Tchar.h'ta sunulmuştur fakat _TCHAR en kullanışlı olandır.
Genel Metin Veri Türleri Eşlemeleri
Genel Metin Veri Türü Adı |
_UNICODE & _MBCS Tanımlanmamış |
_MBCS Tanımlanmış |
_UNICODE Tanımlanmış |
---|---|---|---|
_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 veya _TEXT |
Etkisi yok (önişlemci tarafından kaldırılır) |
Etkisi yok (önişlemci tarafından kaldırılır) |
L (sonra gelen karakteri veya dizeyi Unicode karşılığına çevirir) |
Yordamların, değişkenlerin ve diğer nesnelerin genel metin eşleme listeleri için Çalışma Zamanı Kitaplık Başvurusu'nda bkz. Genel metin eşlemeleri.
Not
str ailesi işlevlerini, gömülü boş bayt bulundurma ihtimali olan Unicode dizeleri ile birlikte kullanmayın.Benzer şekilde, wcs ailesi işlevlerini MBCS (veya SBCS) dizeleriyle birlikte kullanmayın.
Aşağıdaki kod parçası MBCS'ye, Unicode'a ve SBCS modellerine eşleme için _TCHAR ve _tcsrevkullanımını gösterir.
_TCHAR *RetVal, *szString;
RetVal = _tcsrev(szString);
_MBCS tanımlandıysa, önişleyici bu parçayı şu koda eşler:
char *RetVal, *szString;
RetVal = _mbsrev(szString);
_UNICODE tanımlandıysa, önişleyici bu parçayı şu koda eşler:
wchar_t *RetVal, *szString;
RetVal = _wcsrev(szString);
Ne _MBCS ne de _UNICODE tanımlanmadıysa, önişleyici parçayı aşağıdaki gibi tek baytlı ASCII koda eşler:
char *RetVal, *szString;
RetVal = strrev(szString);
Bu nedenle, üç farklı karakter kümesinden herhangi birine özel olan yordamlarla çalıştırmak için tek kaynaklı kod dosyaları yazabilir, sürdürebilir ve derleyebilirsiniz.