汎用テキスト マップの使用
更新 : 2007 年 11 月
Microsoft 固有の仕様 →
さまざまな国際市場向けのコード開発を簡略化するために、Microsoft ランタイム ライブラリには、多くのデータ型、ルーチン、その他のオブジェクトに対して Microsoft 固有の汎用テキスト マップが用意されています。汎用テキスト マップは TCHAR.H で定義されています。これらの名前マップを使用すると、ジェネリック コードを記述できるため、#define ステートメントで定義した記号定数に応じて、ASCII (SBCS)、MBCS、Unicode の 3 種類のどの文字セット用にもコンパイルできます。汎用テキストのマップは Microsoft 固有の拡張機能であり、ANSI とは互換性がありません。
汎用テキスト マップ用のプリプロセッサ ディレクティブ
#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 の文字や文字列に変換する) |
ルーチン、変数、およびその他のオブジェクトの汎用テキスト マップの完全な一覧は、「汎用テキスト マップ」を参照してください。
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);
このように、ソース コードを 1 ファイルだけ記述、保守、およびコンパイルすると、3 種類の文字セットそれぞれに固有なルーチンを実行できます。
← Microsoft 固有の仕様