Pemetaan Teks Generik di tchar.h
Untuk menyederhanakan pengangkutan kode untuk penggunaan internasional, pustaka run-time Microsoft menyediakan pemetaan teks generik khusus Microsoft untuk banyak jenis data, rutinitas, dan objek lainnya. Anda dapat menggunakan pemetaan ini, yang didefinisikan dalam tchar.h, untuk menulis kode generik yang dapat dikompilasi untuk kumpulan karakter byte tunggal, multibyte, atau Unicode, tergantung pada konstanta manifes yang Anda tentukan dengan menggunakan #define
pernyataan. Pemetaan teks generik adalah ekstensi Microsoft yang tidak kompatibel dengan ANSI.
Dengan menggunakan tchar.h, Anda dapat membuat aplikasi byte tunggal, Multibyte Character Set (MBCS), dan Unicode dari sumber yang sama. tchar.h mendefinisikan makro (yang memiliki awalan _tcs
) yang, dengan definisi praprosesor yang benar, memetakan ke str
, _mbs
, atau wcs
fungsi, sebagaimana merujuk. Untuk membangun MBCS, tentukan simbol _MBCS
. Untuk membangun Unicode, tentukan simbol _UNICODE
. Untuk membangun aplikasi byte tunggal, tentukan keduanya (default). Secara default, _UNICODE
didefinisikan untuk aplikasi MFC.
Jenis _TCHAR
data didefinisikan secara kondisional dalam tchar.h. Jika simbol _UNICODE
didefinisikan untuk build Anda, _TCHAR
didefinisikan sebagai wchar_t
; jika tidak, untuk build byte tunggal dan MBCS, itu didefinisikan sebagai char
. (wchar_t
, jenis data karakter lebar Unicode dasar, adalah rekan 16-bit untuk 8-bit signed char
.) Untuk aplikasi internasional, gunakan _tcs
keluarga fungsi, yang beroperasi dalam _TCHAR
unit, bukan byte. Misalnya, _tcsncpy
menyalin n
_TCHARs
, bukan n
byte.
Karena beberapa fungsi penanganan string Single Byte Character Set (SBCS) mengambil parameter (ditandatangani), char*
jenis tidak cocok dengan hasil peringatan kompilator ketika _MBCS
ditentukan. Ada tiga cara untuk menghindari peringatan ini:
Gunakan thunk fungsi sebaris jenis aman di tchar.h. Ini adalah perilaku default.
Gunakan makro langsung di tchar.h dengan mendefinisikan
_MB_MAP_DIRECT
pada baris perintah. Jika Anda melakukan ini, Anda harus mencocokkan jenis secara manual. Ini adalah metode tercepat, tetapi tidak aman jenis.Gunakan thunk fungsi pustaka yang ditautkan secara statis dengan aman di tchar.h. Untuk melakukannya, tentukan konstanta
_NO_INLINING
pada baris perintah. Ini adalah metode paling lambat, tetapi yang paling aman jenis.
Arahan Praprosesor untuk Pemetaan Teks Generik
# tentukan | Versi yang dikompilasi | Contoh |
---|---|---|
_UNICODE |
Unicode (karakter lebar) | _tcsrev peta ke _wcsrev |
_MBCS |
Karakter multibyte | _tcsrev peta ke _mbsrev |
Tidak ada (default tidak _UNICODE memiliki atau _MBCS didefinisikan) |
SBCS (ASCII) | _tcsrev peta ke strrev |
Misalnya, fungsi _tcsrev
teks generik , yang didefinisikan dalam tchar.h, memetakan ke _mbsrev
jika Anda menentukan _MBCS
dalam program Anda, atau ke _wcsrev
jika Anda menentukan _UNICODE
. Jika tidak, _tcsrev
petakan ke strrev
. Pemetaan jenis data lainnya disediakan dalam tchar.h untuk kenyamanan pemrograman, tetapi _TCHAR
merupakan yang paling berguna.
Pemetaan Tipe Data Teks Generik
Teks Generik Nama Tipe Data |
_UNICODE & _MBCS Tidak Ditentukan |
_MBCS Didefinisikan |
_UNICODE Didefinisikan |
---|---|---|---|
_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 atau _TEXT |
Tidak ada efek (dihapus oleh preprocessor) | Tidak ada efek (dihapus oleh preprocessor) | L (mengonversi karakter atau string berikut ke mitra Unicode-nya) |
Untuk daftar pemetaan teks generik rutin, variabel, dan objek lainnya, lihat Pemetaan Teks Generik di Referensi Pustaka Run-Time.
Catatan
Jangan gunakan str
keluarga fungsi dengan string Unicode, yang kemungkinan berisi byte null yang disematkan. Demikian pula, jangan gunakan wcs
keluarga fungsi dengan string MBCS (atau SBCS).
Fragmen kode berikut mengilustrasikan penggunaan _TCHAR
dan _tcsrev
untuk pemetaan ke model MBCS, Unicode, dan SBCS.
_TCHAR *RetVal, *szString;
RetVal = _tcsrev(szString);
Jika _MBCS
telah ditentukan, pra-prosesor memetakan fragmen ini ke kode ini:
char *RetVal, *szString;
RetVal = _mbsrev(szString);
Jika _UNICODE
telah ditentukan, pra-prosesor memetakan fragmen ini ke kode ini:
wchar_t *RetVal, *szString;
RetVal = _wcsrev(szString);
Jika belum _MBCS
didefinisikan _UNICODE
, prapemrosan memetakan fragmen ke kode ASCII byte tunggal, sebagai berikut:
char *RetVal, *szString;
RetVal = strrev(szString);
Oleh karena itu, Anda dapat menulis, memelihara, dan mengkompilasi file kode sumber tunggal untuk dijalankan dengan rutinitas yang khusus untuk salah satu dari tiga jenis set karakter.
Lihat juga
Teks dan String
Menggunakan TCHAR. Jenis Data H dengan Kode _MBCS