web-dev-qa-db-ja.com

C ++:C ++ヘッダーファイルの拡張子として「.hh」を使用する理由

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

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

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

誰かがそのように命名する理由を知っていますか?

25
veda

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

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

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

  • example.c
  • example.cpp
  • example.h
  • example.h ++

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

34
Nawaz

ヘッダーには任意の名前を付けることができます。ヘッダーに拡張子を付けることもできません。

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

5
mfontanini

これは特定の理由ではなく、単なる(開発者またはプロジェクト固有の)規約です。 「ファイル拡張子」は名前の一部にすぎないため、ソースファイルはプレーンテキストファイルであるため、それほど重要ではありません。さらに、ヘッダーファイルは、それらを含むファイルにコピー貼り付けされるだけです(#includeを使用)。そのため、ファイル拡張子の意味はさらに小さくなります。

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

1
Griwes

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

1
drew212

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

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

1
Doug T.

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

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

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