汎用テキスト マップの使用
Microsoft 固有の仕様
さまざまな国際市場に対応したコード開発を容易にするために、Microsoft ランタイム ライブラリには、多くのデータ型やルーチン、オブジェクトなどで利用できる Microsoft 固有の "汎用テキスト" マップが用意されています。 これらのマップは、TCHAR.H で定義されています。 これらの名前のマップを使用して、#define
ステートメントを使用して定義するマニフェスト定数に応じて ASCII (SBCS)、MBCS、Unicode という 3 種類の文字セットのいずれかにコンパイルされるジェネリック コードを書き込むことができます。 汎用テキスト マッピングは、ANSI 互換ではない Microsoft 拡張機能です。
汎用テキスト マッピングのプリプロセッサ ディレクティブ
#define |
コンパイル後の状態 | 例 |
---|---|---|
_UNICODE |
Unicode (ワイド文字) | _tcsrev は _wcsrev にマップされます。 |
_MBCS |
マルチバイト文字 | _tcsrev は _mbsrev にマップされます。 |
なし (既定値: _UNICODE と _MBCS の両方が定義されていません) |
SBCS (ASCII) | _tcsrev は strrev にマップされます。 |
たとえば、TCHAR.H で定義した汎用テキスト関数 _tcsrev
は、プログラムで MBCS
を定義した場合には mbsrev
にマップされ、_UNICODE
を定義した場合には _wcsrev
にマップされます。 それ以外の場合、_tcsrev
は strrev
にマップされます。
同じく TCHAR.H で定義した汎用テキストのデータ型 _TCHAR
は、_MBCS
を定義した場合には char
型にマップされ、_UNICODE
を定義した場合には wchar_t
型にマップされ、どちらの定数も定義しない場合は char
型にマップされます。 プログラミングに便利なように、TCHAR.H には他のデータ型のマッピングも用意されていますが、_TCHAR
が最も使いやすいデータ型です。
汎用テキストのデータ型のマップ
汎用テキストのデータ型の名前 | SBCS (_UNICODE、_MBCS が未定義の場合) | _MBCS が定義されている場合 | _UNICODE が定義されている場合 |
---|---|---|---|
_TCHAR |
char |
char |
wchar_t |
_TINT |
int |
int |
wint_t |
_TSCHAR |
signed char |
signed char |
wchar_t |
_TUCHAR |
unsigned char |
unsigned char |
wchar_t |
_TXCHAR |
char |
unsigned char |
wchar_t |
_T または _TEXT |
影響なし (プリプロセッサによって削除される) | 影響なし (プリプロセッサによって削除される) | L (後続の文字または文字列を対応する Unicode の文字または文字列に変換する) |
ルーチン、変数、およびその他のオブジェクトの汎用テキスト マッピングの完全な一覧については、「 Generic-text マッピングを参照してください。
MBCS、Unicode、および SBCS の各モデルにマッピングするために、_TCHAR
と _tcsrev
を使用するコード例を次に示します。
_TCHAR *RetVal, *szString;
RetVal = _tcsrev(szString);
MBCS
を定義した場合は、プリプロセッサによって上述のコードが次のコードにマップされます。
char *RetVal, *szString;
RetVal = _mbsrev(szString);
_UNICODE
を定義した場合は、プリプロセッサによって同じコードが次のコードにマップされます。
wchar_t *RetVal, *szString;
RetVal = _wcsrev(szString);
_MBCS
と_UNICODE
の両方が定義されていない場合、プリプロセッサは次のようにフラグメントを 1 バイトの ASCII コードにマップします。
char *RetVal, *szString;
RetVal = strrev(szString);
これらのマクロを使用すると、3 種類の文字セットすべてに固有のルーチンを使用して、1 つのソース コード ファイルを記述、保守、コンパイルできます。
Microsoft 固有の仕様はここまで
関連項目
汎用テキスト マッピング
データ型のマッピング
定数とグローバル変数のマッピング
ルーチンのマップ
汎用テキスト プログラムのサンプル