汎用テキスト マップの使用

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) _tcsrevstrrev にマップされます。

たとえば、TCHAR.H で定義した汎用テキスト関数 _tcsrev は、プログラムで MBCS を定義した場合には mbsrev にマップされ、_UNICODE を定義した場合には _wcsrev にマップされます。 それ以外の場合、_tcsrevstrrev にマップされます。

同じく 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 の文字または文字列に変換する)

ルーチン、変数、およびその他のオブジェクトの汎用テキスト・マッピングの完全なリストについては、汎用テキスト・マッピングを参照してください

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 固有の仕様はここまで

関連項目

汎用テキスト マッピング
データ型のマッピング
定数とグローバル変数のマッピング
ルーチンのマップ
汎用テキスト プログラムのサンプル