拡張子のないC ++ヘッダーファイルを使用することは良い習慣ですか?


9

私が従うべきC ++ガイドラインに関して私の同僚と議論があります。

彼は現在、すべてのライブラリをそのように設計しています。

  • 彼はファイル名に一貫性のない大文字と小文字を使用しています
  • 彼のヘッダーの一部には拡張子がありません

拡張子がないことはC ++標準ファイル用に予約されているものであり、大文字を使用するとエラーが発生しやすくなると考えています(特に、WindowsとLinuxの両方で機能するコードを扱う場合)。

彼のポイントは、彼がQt(Qtを使用しないコードの場合でも)慣例に従い、「Qtがそのように実行する場合、それは悪いことではない」と言い続けることです。

今、私はオープンマインドを保つようにしていますが、彼のライブラリで/彼のライブラリで作業しなければならないときは本当に気分が悪いです。これに関して共通して確立された一連のルールはありますか?標準はそれについて何かを教えていますか?

どうもありがとうございました。


3
#define signal………(「Qtがそのように実行すれば、それは悪いことではありません。」)-私が個人的にすべての設計の選択に同意することはできません。
2012

@ジャスティン:私もそうではありませんQt。それは素晴らしいライブラリだとさえ思いますが、それらのデザインの選択のいくつかは私にとって本当に間違っていると感じています。
ereOn

1
@Justin _広く使われている一般的なコードで始まるマクロを見たことがありますが、それは明らかに標準に反しています。
Luchian Grigore

1
しかし、これが拡張機能なしのヘッダーを回避する1つの本当の理由です。私のプライマリIDEとテキストエディターはそれらを自動的に認識しません。私はちょうど*.hppc ++ヘッダーに使用し、すべてのツールは「それを取得」します。
2012

5
スマートプログラマーは使用しないため、Qtはこの規則を使用します。これはヘッダーが新しいQtヘッダーと競合しないことを意味します
MSalters 2012

回答:


16

拡張機能(または不足)が原因で問題が発生することはありません。拡張子を完全に削除すると、ヘッダーファイル(たとえば、ワイルドカード* .hおよび* .hppを使用した検索)が困難になり、ファイルの内容を特定することが難しくなる(たとえば、エディターは、適切な構文強調表示モードを選択するために拡張機能に依存しています)。

コードの観点からは、それほど大きな違いはありません。大文字と小文字を区別し、ファイルの区別に大文字と小文字の違いだけに依存しない限り、大文字と小文字は区別されません。利便性の観点から、小文字をそのまま使用して拡張子(.hまたは.hpp)を付ける方が簡単です。

ただし、上記のいずれよりも重要なことは、開発チーム全体に対して1つの規則選択し、それに従うことです。何かを含めたいときはいつでも、ファイルの大文字と小文字、名前、拡張子を調べる必要があるのは、はるかに悪いことです。これらはすべて、使用しようとしているものについての知識で「推測可能」である必要があります。


1つの規則を選択してそれを守ることは悪い考えではありませんが、既存の規則を改善できるとしたらどうでしょうか。その場合、コースを変更することをお勧めします。
kotlinski

@kotlinskiこれは、選択するものは好みの問題であるため、状況を改善するためにあなたができることが何もない場合の1つです。実際、OS(読み取り、Windows)が拡張子に基づいてファイルを開くプログラムを決定できるため、拡張子を付ける方が何もしないよりはましだと思います。
ポール

@PaulManta:しかし、あなたはここで自分に対して反対しているのではありませんか?まず、何も改善する方法はないとあなたは言います。次に、拡張機能を持つことは、そうでないことよりも優れていると言います。それは変化があり得ないと言う一種の敗北主義的な態度です。
kotlinski

@kotlinski一般的には、古いコードをどれだけ使用するか、すべてを新しい規則に変更することが実行可能かどうか、および規則の混在による影響は何かによって異なります。この場合、私はポールマンタに同意しますが、それは主に個人的な好みであり、実用的な理由から、ほとんどの場合、拡張が優先されます。
Adam Bowen、

1
@kotlinski何かを改善する方法はありませんが、事態を悪化させる方法があります。このディスカッションは、spaces-vs-tabsディスカッションと同じくらい無意味です。ただ一つの慣習を選んで、何か役に立つことをしてください。
ポール、

6

(標準では)標準ヘッダーファイルのみに拡張子を付けることができないという規則はありません。ファイル名はほとんど何でもかまいません。ただし、一般的な推奨事項は次のとおりです。

  1. 拡張子のないファイルはありません。

  2. ファイルの種類が異なれば拡張子も異なります。特に、C ++ヘッダーは、Cコンパイラで受け入れ可能なヘッダーとは異なる拡張子(.hppまたは.hh)を使用します。

(残念ながら、2番目のルールに違反することが多く、C ++ヘッダーファイルにが表示されることがよくあります.h。個人的な経験から、これにより将来的にメンテナンスの問題が発生することは確かですが、これは一般的な方法です。)

ファイル名は一部のシステムでは大文字と小文字が区別され、他のシステムでは区別されないため、大文字と小文字については細心の注意が必要です。機能する2つの異なるルールを見ました。ファイル名のすべてが小文字であるか、ファイル名がC ++のシンボルの場合とまったく同じであるというルールに従います。

どちらの場合も、コンセンサスによってプロジェクトのルールを確立し、全員がそれに従います。


1
私はこれに関してジェームズと完全に一緒です。同じ拡張子の場合、2つの異なる種類のヘッダーファイルを適切に処理するツールを取得するのは悪夢になります。

@TomTannerそして、拡張子のないファイルがあるとさらに悪い。私は主にUnix環境で作業してきましたが、実行可能ファイルに拡張子がないのはいつも私を苛立たせています(そして問題を引き起こしました)。

6
If Qt does it that way, then it can't be bad.

はい。はい、本当にそうです。彼らのライブラリ設計は「私たちはひどくJavaになりたい」です。それは完全に混乱しています。標準ライブラリははるかに優れています。

また、基本的には、これは論理的な誤りです。Qtの設計は、なぜそれが優れているのかについて論理的な議論をすることができる場合にのみエミュレートする価値があります。


これは経験的な議論です。それは多くの人々によって使用される大きなソフトウェア製品です。この命名規則の選択が重大な問題を引き起こした場合、それは既知であり、おそらく今までに変更されます。これは事実ではないので、それはあまりにも悪いことではありません。ただし、これが最良のソリューションであるとは限りません。
H.リッティッチ2018

0

私が知っているように、1998年の標準以降、標準ライブラリヘッダーのみが.hなしになります。したがって、非標準のC ++ヘッダーファイルは、従来どおり.hで記述されています。ただし、これは規則であることを覚えておいてください。拡張子を使用することも、.txt拡張子を使用することもできます。これは、小文字で始まるクラスを作成するようなもので、まだ機能していますが、規則ではありません。


3
ところで「Qtがその方法でやれば、それは悪いことではありません。」それは本当に悪い議論です...

2
標準では、ユーザー定義のヘッダーをどのように名前にするかについては何も言われていません。標準ヘッダーの名前のみを指定します。
マイクシーモア

0

これらは規則ではなく規則であり、規則を順守するための制約はありませんが、参照により参照する場合、規則により作業が容易になります。

extensions(.h、.hpp)に従って、c ++に含まれているファイルには拡張子を付ける必要はありません。cライブラリやboostライブラリなど、c ++以外のヘッダーを使用している場合は、拡張子を使用する必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.