hpp

そういや hpp って拡張子は C++ の header file て意味だよなと思って調べてみたら案外そうでもない意見もあってでもおれはせっかくだから C++ header file には hpp を選ぶぜ的なハナシ。

既出意見はとりあえずわかりやすいとこで以下のみっつくらい ?

拡張子hppは、ヘッダーと実装を両方含んでいることを示しているだけです。それ以上の意味はありません。

拡張子が「hpp」のファイルとは? - C++のヘッダーファイルの拡張子... - Yahoo!知恵袋

「ヘッダーと実装」を宣言と定義に該当するものと解釈したんだけどもしそうなら C 言語でも定義を含んでいたら hpp を使うということだよな。んーこれはなんか誤解を生みそうな rule の気がする。 "pp" はなんの略なんだ。

次、 http://www.boost.org/users/faq.html のしたからよっつめ。

Why do Boost headers have a .hpp suffix rather than .h or none at all? File extensions communicate the "type" of the file, both to humans and to computer programs. The '.h' extension is used for C header files, and therefore communicates the wrong thing about C++ header files. Using no extension communicates nothing and forces inspection of file contents to determine type. Using '.hpp' unambiguously identifies it as C++ header file, and works well in actual practice. (Rainer Deyke)

俺訳 ) Boost ヘッダーはなぜ .h や何もなしの代わりに .hpp という接尾辞なんですか ? ファイル拡張子は人間とコンピュータープログラムの両方に、そのファイルの「型」を伝えます。 '.h' という拡張子は C ヘッダーファイルで使われています。従って C++ ヘッダーファイルに関して間違ったことを伝えてしまうのです。拡張子なしでは何も伝わらず型を決定するためにファイルの内容を精査することを強要してしまいます。'.hpp' だとはっきりと C++ ヘッダーファイルだと特定できますし、事実それでうまくやっているのです。 (Rainer Deyke)

Boost FAQ

もっともらしい。

最後、 http://www.cplusplus.com/forum/beginner/5882/ の一番下、 kbw 氏の発言。

There are times you want to distinguish between C and C++ headers. If you are using just one language, it doesn't really matter what you call your header files. But if you mix the languages in a library or application, it becomes important to seperate them.

You can probably reply on __cplusplus being defined, and make up macros that wrap ' extern "C" ' and such C++ specific content, but the languages have subtle differences when confronted with common code (the size of enums, treatment of const variables for example).

Back in the old CFront days, there was a .C and .H convention for C++ source and header files to avoid conflict with .c and .h for C. However, MS-DOS used a case-insensitive file system and so used .cpp and .hpp instead. Visual Studio's parser still recongnises .hpp and .inl as C++ files, so it's not a completely forgotten form.

I think, if you're programming in just C++, feel free to use .h header files like everyone else. But if you're mixing languages, use .hpp for C++ and reserve .h for C.

I also think it was a mistake to start using .h for C++ programs.

俺訳 ) C と C++ のヘッダーを区別したいとしましょう。ひとつの言語だけを使っている場合、ヘッダーファイルをどう呼ぶかはささいなことです。しかしライブラリーやアプリケーションで両方の言語を使う場合、それらを分けることが重要になってきます。

おそらく __cplusplus が定義されていることに依存したり ( 原文は reply on だけど多分 typo で rely on と書きたかったんだと思う ) 、 C++ 特有の内容を ' extern "C" ' などで囲うマクロを使うことは可能でしょうが、同じコードを前にしたときそれぞれの言語は微妙に異なる解釈をします ( enum のサイズ、 const 変数の扱いなど ) 。

古い CFront の時代では、C の .c と .h との衝突を避けるため C++ ソースファイルとヘッダーファイルには .C と .H を使うという慣習がありました。しかし、 MS-DOS は大文字小文字を無視するファイルシステムを使っていたため .cpp と .hpp が代わりに使われるようになりました。 Visual Studio のパーサーは現在でも .hpp と .inl を C++ のファイルと認識しますから、これは完全に忘れられた形式ではないですね。

C++ だけでプログラムするなら、他の方と同様遠慮せずに .h ヘッダーファイルを使えばいいと思います。
だけど両方の言語を使うなら、 C++ には .hpp を使って .h は C のために取っておくのがいいですよ。

C++ プログラムに .h を使い始めたことも間違いだと思いますけど。

ふーむ Microsoft 社の提供する OS の使っている filesystem から出てきたアレなわけね。で C++ は C の上位互換なので .c と .h もアリなんだけどそれは C としてであって C++ として使うのは間違いなんじゃね ? って意見だ。てかこのひと CFront 時代 ( 1983 らしい -> http://ja.wikipedia.org/wiki/Cfront ) 知ってるってすげーな。ちなみにこの topic の他のひとは「 header の拡張子とか compiler にとっては関係ないし」という意見が多め。歴史も含めて包括的に意見を書いているのは kbw 氏くらいだったので載せさせてもらった。

でまぁ俺自身どうするのかという問題なんだけど "header plus plus" の略で C++ 用 header file という位置づけでいいじゃないということで。 C compiler でも理解出来る中身しか含んでいなかろうが C++ compiler を想定して書いたんなら hpp を使うという方向で行きますヨ。あーつまりおれの書いた source で hpp と書いてあるのは C compiler に通すなという意思表示でもあるわけだな。