• ベストアンサー

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

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

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

  • ベストアンサー
noname#30871
noname#30871
回答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
質問者

お礼

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

その他の回答 (1)

  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.1

Unicodeってわかりますか? 大雑把に言うと、_Tマクロは、Unicodeを使うかどうかを あまり気にしなくて良くなるおまじないです。 もし、_Tマクロを使わない場合には、文字列をいちいち L"abcdef" と書かなくてはいけません。 でも、そう書いちゃうと、Unicodeを使わない指定で コンパイルすると、エラーになっちゃうんです。

kinokos
質問者

お礼

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

関連するQ&A

  • ABCDEFの6枚のカードから3枚取り出す

    ABCDEFの6枚のカードから3枚取り出すと何通りになりますか? 答えの出し方も教えてください。

  • エクセルの条件付書式について伺います。 例えば、ABCDEFと列があり

    エクセルの条件付書式について伺います。 例えば、ABCDEFと列があります。 Eに「引出」と入力すると、ABCDEFの列のセルの色を変えると言う事は、可能ですか?

  • T1.T2.T3って何?

    LIMEWIREやGNUTELLAなどでダウンロードの為の 回線スピードを設定するときT1.T2.T3って ありますけど何のことか教えて下さい? DSL<T1 T1<T2って感じなんですか?

  • 円に内接する六角形ABCDEFがあり、それぞれの辺の長さはAB=CD=

    円に内接する六角形ABCDEFがあり、それぞれの辺の長さはAB=CD=EF=2,BC=DE=FA=3である。円の半径をRとするとき ∠ABCと半径Rと六角形の面積の求め方が分かりません。 ちなみに ∠ABC=120゜R=√57/3面積=37/4×√3になるそうです。 回答よろしくお願いします。

  • パソコンが立ち上がらないT-T

    昨日AVG2013というウィルス対策ソフトを入れたんですが、その直後からパソコンが動かなくなっちゃいました。 重たすぎて、バックグラウンド操作が延々に・・・延々に・・・そして延々に・・続いている感じです。 強制ブッチしてたちあげなおしたのですが、やっぱりバックグラウンド操作が始まってスタートボタンも押せない感じです。このあとどうするのが正解ですか?T-T パソコンは富士通のLIFEBOOKというやつです。

  • よくわかんないです…(T-T)

    私は今高2の女の子です。 今イッコしたの部活の後輩の男子(Tくん)と ちょっと仲良くなってきたかなぁ??って感じです。 Tくんとは最近は結構メールしたり 彼はギターやってるんで聞きに行ったりしてます。 あと色々暴露し合ったりしてます(^-^; あたしが間近で交通事故を目撃して 凹んでた時とかメールをくれたりしました。 昨日メールしてた時に土曜日部活のみんなで 遊ぶはずだったのが、中止になったので 『ごめんね。でもまた遊びに行こうね☆ また暇な時があったら教えてねV(^0^)』って送ったら 『今度の日曜日暇ですよ~』って来たんです。 『じゃあ、買い物行こうよ(←前に服選んでって言われた)』って言ったら 『いいですよ~(^-^)』って来たので今度の日曜日遊ぶ事になりました。 『他に誰か誘う??』って聞いたら 『どっちでもいいですよ~。2人きりっつうのも気まずい?』と言われました。 まだそんな親しくないのであたしは2人だと 緊張するんですけどなんか気まずいとか 言いにくいな~って思ったけど 『そんな事ないよ~!でも2人だと緊張するかも(笑)』って言ったら 『緊張する意味がイマイチわかんない』って言われました。 それで部活の女友達を1人誘うことにしたんです。 (T君もいいよって言ってくれた。) でも、今日の部活の時に日曜日の事について話してたら、 なんだかT君が微妙な顔してるよーな気がしたんです(T-T) なんてゆーか買い物嫌がってるのかなぁ?って思ったんです。 でもメールとかだと結構ノリ気みたいな感じだったのに…。 これは嫌がってるんでしょうか?? それともあたしの考えすぎなんでしょうか?? 今度の日曜日なんで困ってます…。 女友達の親がアウトレットに行くんで その親と一緒に車に乗ってく予定なんですけど、 それが微妙なんでしょうか??男1人だし。 みなさんアドバイスお願いします!!!

  • renameについて

    ”ABCDEF”というフォルダに入っている3つのファイルの名前を それぞれ”01,02,03”にしたいとき下記のプログラムで大丈夫ですか? というか、完成していますか? 他にしなくてはいけない事や間違いがあったら教えて下さい。 #! c:/perl/bin/perl $abcdef = './ABCDEF/'; $newname = 01 02 03; foreach $abcdef (@NAME) { my $newname = $abcdef; rename($abcdef,$newname) or warn "Couldn't rename $abcdef to $newname: $!\n"; } パソコン初心者で困っています。実際に実行したくても ”ページが見つかりません”になって確認できないし・・・ インストールは正常に出来たはずなのに・・・ 何でですかね? あと、フォルダに入っているもっと多くのファイル名を変えるとき(1000個とか) にはどうしたらいいんですか? 宜しくお願い致します。

  • 10tトラックと25tトラックって大きさ違うの?

    トラックドライバーに転職を考えているものです。 求人に10tウイング使用とか25tウイング使用とあるのですが10t車と25t車の区別がつきません。 大型箱トラックなのですが積載量が倍も違うのに車体大きさは同じに感じられます。 大きさ自体ちがうのでしょうか? それとも車体大きさは同じだがフレーム関係が違うのでしょうか? 何か見分ける方法ありますか? また、乗った感じは(運転のし易さ)全然違うのでしょうか?

  • 911Tと920T

    911Tと920Tどちらを買うか迷っています。 予約録画など機能的に見たら後継機の920Tの方が断然いいのですが、デザイン的に考えると911Tの方が魅力があってどちらも捨てがたいです。 他に920Tにはあって、911Tにはない機能はありますか?

  • T2,T4,T6ファージなどのTって

    夏休みの自由研究で今バクテリオファージについて調べているのですが、T2,T4,T6ファージなどについているTとはどういう意味か教えてくださる人がいればよろしくお願いします。