Bagikan melalui


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:

  1. Gunakan thunk fungsi sebaris jenis aman di tchar.h. Ini adalah perilaku default.

  2. 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.

  3. 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 _tcsrevteks 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