ComputerVisionまとめの部屋

役に立った情報や調査結果をまとめています

_T("")マクロとは

プログラムの中で_T("")マクロが頻繁に使われている。

_T("")マクロは、ユニコードとマルチバイトの差異を解消するためのマクロ。

_T("文字列")としたときのの実際の動きを考えると、ユニコード設定ならL"文字列"として展開し、マルチバイト設定なら従来どおり"文字列"と展開される。

例えば _T("ABC")とプログラム中に書いた場合、
Unicodeが定義されたシステム内では、L"ABC"と書かれたのと同じ16ビットのワイド文字型になり、Unicodeが定義されていなければ、ただの"ABC"で書かれたのと同じ、8ビットのANSI文字列となる。


ではなぜ_T("")マクロを使う必要があるのか?

VisualC++ではビルド設定によって使用する文字セットをANSIにするかUnicodeにするかを切り替えることができる。

例えばUnicodeを使うなら、文字列定数は全て L"ABC"などのように定義する必要がある。マルチバイト文字セットを使用するなら、この「L」は必要ない。
そのどちらでも対応できるようにするのがTCHAR型の文字配列であり、TCHAR型に変換処理してくれるのが_T("")マクロである。

結局、どうすればいいのか?というと、Windowsプログラミングをするとき、文字列定数は"ABC"ではなく、常に_T("ABC")としておけばOKということだろう。