プロが教える店舗&オフィスのセキュリティ対策術

たまに、
  lstrcpy( ... , _T("abcdef") );
こんな感じで _T が、ついているのがあるのですが、これはいったいなんですか?

A 回答 (2件)

 結論から言えば「ソースコードをいっさい修正せずにUnicode対応をするためのマクロ」です。



 lstrcpy()の第2引数の型は、char*ではなく「LPCTSTR」型になってますよね。_T()は、文字列をchar*型ではなくLPTSTR型にするマクロです。(LPCTSTRはconstなLPTSTR)

 では、LPTSTRとは何か。これはTCHAR型へのポインタです。ではTCHARは何か。

 TCHARは次のように定義されています。

#ifdef _UNICODE
typedef wchar_t TCHAR;
#else
typedef char TCHAR;
#endif

つまり、マクロ定数「_UNICODE」が定義されていればTCHARの正体はwchar_t、そうでなければcharになります。

 char型に日本語文字を入れたとき、ご存知のようにシフトJISコードにされて入ります。一方、wchar_tに入れたときにはUnicodeで入ります。

 最近のWindowsソフトは国際化のために、内部文字コードにUnicodeを使うことが多くなっています。いまはシフトJISを使っているソフトでも、将来はUnicodeに移行することが見込まれます。

 しかしUnicodeに移行するときに、ソースをいちいち修正していては大変です。そこで、文字列はあらかじめ_T()で囲っておくのです。

 コンパイルオプション「/D "_UNICODE"」でマクロ定数を立てて再コンパイルしてやれば、即、Unicodeへの移行が完了するというわけです。
    • good
    • 1
この回答へのお礼

ありがとうございます。詳しく説明してくれて、とても勉強になりました。

お礼日時:2001/04/14 23:13

Unicodeってわかりますか?



大雑把に言うと、_Tマクロは、Unicodeを使うかどうかを
あまり気にしなくて良くなるおまじないです。

もし、_Tマクロを使わない場合には、文字列をいちいち
L"abcdef" と書かなくてはいけません。

でも、そう書いちゃうと、Unicodeを使わない指定で
コンパイルすると、エラーになっちゃうんです。
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2001/04/14 23:16

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A