31

「.h」だけではなく、C++ ヘッダー ファイルの拡張子として「.hh」を使用する理由を知りたいです。

ヘッダー ファイルは前処理されており、プリプロセッサはヘッダー ファイルの拡張子を気にしません。なので、拡張子「.qwe」(test.qwe)のヘッダーファイルを作っても。次に、C++ ヘッダー ファイルの拡張子として ".hh" を使用する理由。

Cファイル(拡張子「.c」)と区別するためにC++ファイルの拡張子として「.cc」を使用していると言う人もいます。同様に、Cと区別するためにC++ヘッダーファイルの拡張子として「.hh」を使用しています。ヘッダー ファイル (拡張子は「.h」)。これは正当な理由とは思えません。

そんなネーミングの理由わかる人いますか?

4

6 に答える 6

39

Cファイル(拡張子「.c」)と区別するためにC++ファイルの拡張子として「.cc」を使用していると言う人もいます。同様に、Cと区別するためにC++ヘッダーファイルの拡張子として「.hh」を使用しています。ヘッダー ファイル (拡張子は「.h」)

まさにその理由です。CPP ヘッダーと C ヘッダーを区別するだけです。

Boost などの一部のプログラマーおよびライブラリーは、.hppCPP ヘッダーに使用します。私の個人的な選択はこれです:

  • example.c
  • たとえば .cpp
  • たとえば .h
  • example.h++

それらがすべて巨大なプロジェクトに属している場合でも、どれがどれであるかを把握できます。説明は必要ありません。

于 2012-04-27T16:24:12.603 に答える
8

ヘッダーには自由に名前を付けることができます。拡張子がまったくない場合もあります。

この FAQでは、ヘッダーの命名規則について言及しています。

于 2012-04-27T16:23:42.433 に答える
2

それは主に社会的慣習だと思います。

ただし、最近の GCC コンパイラは、(単一の) ヘッダーをコンパイルするfoo.hhか、ヘッダーを解析した後にコンパイラ (によって開始されたプログラム) の永続的なメモリ ヒープ イメージを本質的に含むfoo.hようなものfoo.hh.gchにコンパイルできます。foo.h.gchcc1plusg++

C++11 標準ライブラリでは<vector>、拡張子なしなどのヘッダー ファイルが定義されていることに注意してください。

于 2012-04-27T16:26:29.993 に答える
1

理由の 1 つは、C++ コードの周りに C API を持つ dll を作成している場合、クライアントが C 関数をインポートするために使用する可能性のある C ヘッダーと、明示的に使用しない内部 C++ ヘッダーを区別する必要があることです。クライアントにインポートを許可したい。

C 関数へのバインドは、ほとんどの言語/環境から非常に単純で、オーバーヘッドはほとんどありません。C++ で継承されるすべての複雑さについて考える必要はありません。したがって、そのようなライブラリを使用する場合は、C++ を C インターフェイスから分離する必要があります。

于 2012-04-27T16:26:19.000 に答える
1

これは特定の理由によるものではなく、単なる (開発者またはプロジェクト固有の) 規則です。「ファイル拡張子」は名前の一部にすぎないため、ソース ファイルは単なるテキスト ファイルであるため、あまり重要ではありません。さらに、ヘッダー ファイルは、それらをインクルードしたファイルにコピー アンド ペーストされるだけです ( #include.

Borland のライブラリのヘッダーには.hpp拡張子がありました。C++ の標準ライブラリ ヘッダーには拡張子がまったくありません。それは慣習と個人的な好みの問題です。

于 2012-04-27T16:24:03.277 に答える
1

これは完全に慣例であり、特別な理由はありません。通常、人々はプロジェクト全体、チーム全体、さらには会社全体で一貫性を保とうとします。これは、開発者が長い間離れた後でコードを取得するのに役立ちます。abc.hh はファイル abc.cc に対応し、abc.h は abc.c に対応していることを理解するのに役立ちます。

于 2012-04-27T16:25:29.927 に答える