VC6で拡張子が*.ccなファイルをC++ソースとして扱わせる

Google Testを無理やりVC6に移植しようとしている。が、なかなか上手くいかない。

VC6はもともとC++への準拠度が甘く、有名なところでテンプレートの部分特殊化ができないというのがあるが、それ以外にも色々と問題があることがわかってきた。
いい加減見捨てられているコンパイラだし、敢えて今やる必要はない。ただ、中途半端なところまでやってしまったので、いまさら引き返すのも癪。
テンプレート周りのHackに関してはboostが参考になるのだが、Google Testはテンプレートだけでなく、マクロや内部クラスなども駆使した近代C++?なので、最初思っていたよりずっと苦戦している。

それはそうとして、最初に躓いたのが、Google TestのC++ソースファイルの拡張子が*.ccなこと。VC6は標準では*.ccをC++ファイルとして扱ってくれない。インテリセンスはもとより、色付け表示もされないし、コンパイルボタンも押せない。

しらべてみると簡単に対応策が見つかった。
How to make Visual C++ recognize file extensions as C/C++ files

  • [HKEY_CURRENT_USER\Software\Microsoft\DevStudio\6.0\Build System\Components\Platforms\Win32 (x86)\Tools\32-bit C/C++ Compiler for 80x86] にあるInputSpecに*.ccを追加してやる。
  • [HKEY_CURRENT_USER\Software\Microsoft\DevStudio\6.0\Text Editor\Tabs/Language Settings\C/C++]にあるFileExtensionにccを追加してやる。

これでVC6のIDE上で色付け表示され、コンパイルボタンも押せるようになる。
ただ、これだけだとコンパイルした時に
「コマンド ラインの警告 D4024 : ソースファイルのタイプ 'C:\work\usingGtest_bak\gtest\test\gtest_unittest.cc' は認識できませんでした。オブジェクト ファイルと仮定します。」
と言われてしまう。
なので、さらにプロジェクトの設定でコンパイルオプションに/TPをつけてやる。こうすれば拡張子ccのファイルをC++としてコンパイルできる。

Google C++スタイルガイド 日本語訳(textdrop)によると、

C++ファイルは .cc で終わるべきであり、ヘッダファイルは .h で終わるべきだ。

だそうだ。理由は特に書かれていない。