TCHARと_TCAHRはどっちが正しいのですか?
両方正しいなら使い分けはどうしますか?
両方のコードを見かけたので疑問に思い
質問させていただきました。
ヘルプは見ましたが、
違いがわかりません。
>TCHARと_TCAHRはどっちが正しいのですか?
後者はどう見ても正しくありませんが...
簡単に調べた範囲では正確なことはわかりませんでした。
正式な違いを調べるには Microsoft に直接問い合わせるしかないと思います。
tchar.h を読む限りにおいてある種の妄想を行うことは可能ですが、
それが正しい保証などどこにも無いわけで。
適当に選ぶことにします。
ありがとうございました。
えぇー!? 適当でイイの?
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 系アプリはコンパイルできないのか...
以下、妄想。
STDCというくらいだから、標準C系(ランタイムライブラリ)で_TCHARを、
それ以外でTCHARを使うような気がする。
なんだかわからなくなってきました。
tetrapod様は
_TCHAR:Microsoft VC++ 固有の型として定義される
TCHAR:(Microsoft VC++ 固有の型ではあるが) 標準の型のひとつとして扱われている
名無し様は
_TCHAR:標準C系(ランタイムライブラリ)
TCHAR:それ以外で
逆のこと言ってるみたいですが違うのでしょうか?
まあ、VCで使うからどっちでもいいきがするので
適当に決めます。
情報ありがとうございました。
> # ってことは -Za を指定すると Win32 GUI 系アプリはコンパイルできないのか...
やってみればわかりますが、できません。
TCHAR に起因した話ではなく、wingui.h で無名構造体を使いまくってたり、えとせとら。
> まあ、VCで使うからどっちでもいいきがするので
> 適当に決めます。
断固適当に決めると硬い意志を決められてしまったのならば、もう言うことはありませんが…
どちらでもいいとお考えならば、TCHAR をおすすめします。
_TCHAR なんて聞いたことありませんでしたし。
で、標準 C++ にこだわるのであれば、そもそも TCHAR なぞ使わずに、char か wchar_t を使
っておくが吉ではないでしょうか。