1. ホーム
  2. c++

[解決済み] .c vs .cc vs .cpp vs .hpp vs .h vs .cxx [重複]の場合

2022-02-09 07:50:57

質問

<ブロッククオート

重複の可能性があります。
クラス定義のための*.hまたは*.hpp
C++コードの正しいファイル拡張子は?

昔はそう思っていたのですが。

  • .h ファイルは、CやC++のヘッダーファイルで、通常は宣言だけが含まれています。
  • .c ファイルはC言語のソースコードです。
  • .cpp ファイルは、C++のソースコードです(Cのソースコードであることもあります)。

のようなファイルであれば .hpp , .cc および .cxx が出てきて、すっかり混乱してしまいました...これらの違いは何ですか?新しいものはいつ使うのでしょうか?

解決方法は?

歴史的に見ると、C++で最初に使われた拡張機能は .c.h これは、C言語の場合と全く同じで、実用上問題がありました。 .c このため、ビルドシステムがC++とCのファイルを簡単に区別することができませんでした。

C++が開発されたUnixは、大文字と小文字を区別するファイルシステムです。 そのため、あるものは .C をC++のファイルとして使用します。 その他は .c++ , .cc.cxx . .C.c++ は、他のファイルシステムでは使えないという問題があり、すぐに使われなくなりました。DOSとWindowsのC++コンパイラは、この問題を解決するために .cpp その中には、設定が不可能ではないにしても、その選択を難しくしているものもあります。 移植性を考慮すると、MS-Windows以外でもその選択が最も一般的でした。

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

さらに、一部では .ii , .ixx , .ipp , .inl はインライン定義を提供するヘッダ、そして .txx , .tpp.tpl をテンプレート定義に使用します。 これらは定義を提供するヘッダに含まれるか、それらが必要とされるコンテキストで手動で行われます。

コンパイラやツールは通常、どのような拡張子が使われているかを気にしませんが、C++に関連する拡張子を使えば、使用されている言語を正しく認識できるように設定する方法を追跡する必要がなくなります。

2017年編集:Visual Studioの実験的モジュールサポートが認識すること .ixx をモジュールインターフェイスのデフォルトの拡張子として認識し、clang++は .c++m , .cppm.cxxm を同じ目的で使用することができます。