エレクトロニクス・フィーバー

プログラミングと電子工作で共有しようと思ったことを載せていきます

TCHAR はもう使うな

C/C++Windows プログラミングをしていると、 TCHAR という物が出てきます。 初心者の方はそこで “TCHAR” で検索します。使い方が出てきます。そして「これからは TCHAR を使おう」ということを知ります。これが良くない。 この記事は TCHAR は時代遅れであり、2017年の現在ではもう使うべきではないということを Windows プログラミングの初心者向けに書きます。

そもそも TCHAR は何のためにある(あった)のか

TCHAR という型は、 WindowsUnicode に対応するために過渡的に作られた仕組みです。

かつて、Unicode の無かった頃、 Windows では、文字を char で表していました。 しかし、 char で表せる文字は英語以外の言語では明らかに不足していたため、各国で別々の方法でそれぞれの言語の文字を表すための方式を作っていました。 そこで、それらを統一するために Unicode という仕組みが作られ、 Windows もそれに対応することにしました。 WindowsUnicode に最初に対応したのは 98 と NT 4.0 だそうです。

そこで問題になったのが、Unicode に対応するためには、OS とアプリケーションの両方が Unicode に対応していなければ Unicode 対応にならないということです。 具体的な課題としては2つ考えられます。1つ目は、Unicode に対応していないアプリケーションを Unicode に対応させるための方法を用意しなければならない。2つ目は、新しいアプリケーションを Unicode に対応した Windows と、Unicode に対応していない古いバージョンの Windows の両方で動かす方法を提供しなければならないことです。

そこで編み出した解決方法は、コンパイルオプションによって、一つのソースコードから Unicode に対応した実行ファイルと対応していない実行ファイルを別々に出力するという方法でした。これが TCHAR です。 TCHAR はコンパイルオプションによって文字型を char と Unicode 用の WCHAR に切り替えることができます。

今でも TCHAR を使うべきなのか

TCHAR は一つのソースコードから Unicode に対応した実行ファイルと対応していない実行ファイルを出力するための方法でした。 これは、Unicode に対応していない Windows がまだ使われていた時代には意味のある仕組みでした。 しかし、今となってはそんな古いバージョンはサポート期限も切れており、新しく入手するどころかインストールされたPCを見つけることすら困難です。 新しく開発するアプリケーションで、そんなに古いバージョンに対応して欲しいという要望が来ることはまずありません。 従って、新規開発では TCHAR を使わずに WCHAR を直接使えば十分なのです。

もう作ってしまったものを消せという意味ではない

誤解しないでいただきたいのは、 TCHAR を使って作ってしまった既存のアプリケーションを、 TCHAR を使わないように作り直せという意味ではありません。 新しく開発する案件では、採用する意味は無いということです。