.c vs .cc vs. .cpp vs .hpp vs .h vs .cxx [重複] 質問する

.c vs .cc vs. .cpp vs .hpp vs .h vs .cxx [重複] 質問する

重複の可能性があるもの:
クラス定義用の *.h または *.hpp
.cc と .cpp ファイルサフィックスの違いは何ですか?

以前は次のように考えていました。

  • .hファイルは C および C++ のヘッダー ファイルであり、通常は宣言のみが含まれます。
  • .cファイルは C ソース コードです。
  • .cppファイルは C++ ソース コードです (C ソース コードの場合もあります)。

その後.hpp、、、.ccなどのファイルが.cxx登場し、完全に混乱してしまいました...これらの違いは何でしょうか? 「新しい」ファイルはいつ使用するのですか?

ベストアンサー1

歴史的に、C++ で最初に使用された拡張子は、C とまったく同じように と でした。.cこれ.hにより、特に により、ビルド システムが C++ ファイルと C ファイルを簡単に区別できないという実際上の問題が発生しました.c

C++ が開発された Unix では、大文字と小文字が区別されるファイル システムがあります。そのため、.CC++ ファイルには が使用される場合もあります。 、 、 が使用される場合もあります。 およびは、.c++他のファイル システムでは使用できないという問題があり、すぐに使用されなくなりました。DOS および Windows の C++ コンパイラは を使用する傾向があり、その一部では、選択を構成するのが困難、または不可能になっています。移植性を考慮すると、MS-Windows 以外でも、この選択が最も一般的になりました。.cc.cxx.C.c++.cpp

ヘッダーでは、対応する.H.h++.hh、が使用されています。ただし、メイン ファイルとは異なり、.hxxは、ヘッダーが C コンテキストに含まれるかどうかがわからないという欠点があるにもかかわらず、今日でも C++ でよく使用される選択肢となっています。標準ヘッダーには現在、拡張子はまったくありません。.hpp.h

さらに、インライン定義を提供するヘッダーに、、、.ii.ixx使用し、テンプレート定義に、およびを使用している人もいます。これらは.ipp、定義を提供するヘッダーに含まれているか、必要なコンテキストで手動で含まれています。.inl.txx.tpp.tpl

コンパイラやツールは通常、使用される拡張機能を気にしませんが、C++ に関連付けられた拡張機能を使用すると、使用されている言語を正しく認識できるように構成する方法を追跡する必要がなくなります。

2017 編集: Visual Studio の実験的なモジュール サポートは、.ixxモジュール インターフェイスの既定の拡張機能として認識され、clang++ は.c++m、同じ目的で を.cppm認識します。.cxxm

おすすめ記事