TCHARと_TCHAR

[戻る]
真下 2005/04/18(月) 10:58:11
TCHARと_TCAHRはどっちが正しいのですか?
両方正しいなら使い分けはどうしますか?
両方のコードを見かけたので疑問に思い
質問させていただきました。

tib 2005/04/18(月) 11:15:33
MSDNを検索してみましょう。

TCHAR
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/mapi/html/34762d86-22bc-4dad-82e5-e30203b7771e.asp

_TCHAR
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_crt_data_type_mappings.asp

真下 2005/04/18(月) 11:23:34
ヘルプは見ましたが、
違いがわかりません。

tetrapod 2005/04/18(月) 11:59:08
>TCHARと_TCAHRはどっちが正しいのですか?
後者はどう見ても正しくありませんが...

簡単に調べた範囲では正確なことはわかりませんでした。
正式な違いを調べるには Microsoft に直接問い合わせるしかないと思います。

tchar.h を読む限りにおいてある種の妄想を行うことは可能ですが、
それが正しい保証などどこにも無いわけで。

真下 2005/04/18(月) 12:35:46
[[解決]]
適当に選ぶことにします。
ありがとうございました。

tetrapod 2005/04/18(月) 15:15:33
えぇー!? 適当でイイの?

tchar.h の中を見るに以下のことがわかります。
・_TCHAR と TCHAR は同一の typedef となる(同等品ということ)
・__STDC__ 配下では TCHAR は定義されない (-Za オプション指定時)
 _TCHAR のほうは定義される

これに名前付け規約 (_ で開始される名前は処理系固有の機能とする) をくっつけると

_TCHAR は Microsoft VC++ 固有の型として定義される
TCHAR は (Microsoft VC++ 固有の型ではあるが) 標準の型のひとつとして扱われている
と妄想することが出来ます。

VC++ 固有の機能であることを強く主張したいなら _TCHAR を使えばいい
Windows 標準機能であることを強く主張したいなら TCHAR を使えばいい
のではないでしょうか。

VC++6 標準のヘッダおよび MFC4.2 のソースを検索してみました。
MFC では TCHAR が使われています。_TCHAR は一切使われていません。
SDK はほとんど全て TCHAR を使っています。(ごく一部に _TCHAR)

PSDK 2003/Feb では _TCHAR はすべて排除され TCHAR に置き換わっています。

# ってことは -Za を指定すると Win32 GUI 系アプリはコンパイルできないのか...

名無し 2005/04/18(月) 17:17:00
以下、妄想。

STDCというくらいだから、標準C系(ランタイムライブラリ)で_TCHARを、
それ以外でTCHARを使うような気がする。

真下 2005/04/18(月) 17:56:24
なんだかわからなくなってきました。

tetrapod様は
_TCHAR:Microsoft VC++ 固有の型として定義される
TCHAR:(Microsoft VC++ 固有の型ではあるが) 標準の型のひとつとして扱われている

名無し様は
_TCHAR:標準C系(ランタイムライブラリ)
TCHAR:それ以外で

逆のこと言ってるみたいですが違うのでしょうか?
まあ、VCで使うからどっちでもいいきがするので
適当に決めます。

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

シャノン 2005/04/18(月) 20:37:56
> # ってことは -Za を指定すると Win32 GUI 系アプリはコンパイルできないのか...

やってみればわかりますが、できません。
TCHAR に起因した話ではなく、wingui.h で無名構造体を使いまくってたり、えとせとら。

シャノン 2005/04/18(月) 20:40:46
> まあ、VCで使うからどっちでもいいきがするので
> 適当に決めます。

断固適当に決めると硬い意志を決められてしまったのならば、もう言うことはありませんが…
どちらでもいいとお考えならば、TCHAR をおすすめします。
_TCHAR なんて聞いたことありませんでしたし。

で、標準 C++ にこだわるのであれば、そもそも TCHAR なぞ使わずに、char か wchar_t を使
っておくが吉ではないでしょうか。

古いスレッドには追加発言できません。