char、wchar_t(WCHAR)とTCHAR

char

 文字列を扱う型としてよく知られているchar型はsizeof(char)=1バイトの型だ。
 charに代入できるのは半角文字1文字で、漢字など2バイトからなる全角文字を代入したいとき は(微妙な表現だが)2つのcharが必要になる。



wchar_t(WCHAR)

 ユニコードを扱うための型として用意されたのがこのwchar_tだ。sizeof(wchar_t)=2バイトの 型でありchar型よりも使用バイト数が多い。
 wchar_tに代入できるのはユニコードでの1文字で、半角や全角文字などの区別はない。

 ヘッダーの中では以下のように宣言されている。
typedef unsigned short wchar_t;
typedef unsigned short WCHAR;    // wc,   16-bit UNICODE character
 つまりwchar_tとWCHARのどちらもunsigned short型として定義されている。



TCHAR

 1つのソースコードをコンパイルオプションだけで通常ビルドだけでなくユニコードビルドも できるようにするための型がTCHARだ。この型は以下のように宣言されている。
#ifdef _UNICODE
typedef wchar_t		TCHAR;
#else
typedef char		TCHAR;
#endif
 つまり、ユニコードビルド時はsizeof(TCHAR)=2バイトに対して、通常ビルド時はsizeof(TCHAR) =1バイトとなる。

カテゴリー「VC++ TIPS」 のエントリー