-PR-
解決済み

_T("abcdef") の_Tってなんですか?

  • 暇なときにでも
  • 質問No.63410
  • 閲覧数6801
  • ありがとう数11
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 100% (13/13)

たまに、
  lstrcpy( ... , _T("abcdef") );
こんな感じで _T が、ついているのがあるのですが、これはいったいなんですか?
通報する
  • 回答数2
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.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への移行が完了するというわけです。
お礼コメント
kinokos

お礼率 100% (13/13)

ありがとうございます。詳しく説明してくれて、とても勉強になりました。
投稿日時 - 2001-04-14 23:13:12
-PR-
-PR-

その他の回答 (全1件)

  • 回答No.1
レベル14

ベストアンサー率 50% (1122/2211)

Unicodeってわかりますか?

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

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

でも、そう書いちゃうと、Unicodeを使わない指定で
コンパイルすると、エラーになっちゃうんです。
お礼コメント
kinokos

お礼率 100% (13/13)

ありがとうございました。
投稿日時 - 2001-04-14 23:16:00


このQ&Aで解決しましたか?
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


専門家があなたの悩みに回答!

-PR-

ピックアップ

-PR-
ページ先頭へ