2016-11-16 25 views
-2

私はオープンソースプロジェクト(Open Scene Graph)を使用しています。私はすべてのヘッダーファイル名がであることがわかったFile形式であることを発見しました。拡張子なしのファイル一部のWebサイトに記載されています。拡張子のないC++ヘッダファイル

これらの開発者が従来の.hファイル拡張子ではなく、この拡張機能を使用した理由を知りたいと思います。

+0

[iostreamとiostream.hの違い](http:// stackoverflow。com/questions/2976477/difference-between-iostream-and-iostream-h) –

答えて

4

これはC++コードのthis repositoryです。

このコードの作成者は、C++標準ライブラリのパターンに従うことにしたようです。標準のC++では、ライブラリヘッダは.hの拡張子を持つはずです。だから、次は正しいです:<iostream.h>を書くほとんどの実装では

#include <iostream> 

も動作しますが、拡張子なしのバージョンは実際には正しいです。 C++標準ライブラリは、ネームスペースの導入と標準ライブラリのためのstdネームスペースの導入により、C++ 98の拡張を削除することができました。

C++標準では、他のヘッダーの拡張子を必要とせず、禁じもしていないので、使用するファイル拡張子があれば、それは一部のソフトウェアの作者によって異なります。最も一般的な選択肢は、.hまたは.hppです。後者は、CヘッダーをCヘッダーと区別するためのものです。

OpenSceneGraphコードを見てみると、インクルードのC++標準ライブラリパターンに従っていることがわかります。拡張子はなく、すべてがosg名前空間にあります。標準ライブラリのstd名前空間に似ています。したがって、OpenSceneGraphライブラリを使用することは、C++標準ライブラリを使用することと非常によく似ています。

#include <osg/Camera> // Provides osg::Camera 

それは同じパターンだ:だから私はそれがOSGの著者はC++標準ライブラリと同じパターンに従うことを望んでいたことを言っても安全だと思う

#include <string> //Provides std::string 

。私の個人的な意見は、ヘッダーファイルを検索できるだけであっても、ファイル拡張子を持つ方がよいということです。

+0

実際には最新の実装では、MSVC以外の ' 'はサポートされていません。それを他のコンパイラで試してみると、エラーが発生します –

+1

名前空間はヘッダ名とは関係ありません。 –

+0

@PeteBecker確かに直接ではありませんが、ネームスペースがC++ 98で登場したときに拡張子を持たないファイルへの移行ではありませんでしたか?いくつかの実装では、 'std :: cout'の代わりにグローバルな' cout'を与える 'iostream.h 'のようなシンボルを名前空間の外に提供する' .h'バージョンを維持していました。 – DUman

-1

私が知っていることは、ほとんどの名前がす​​でにC標準ライブラリによって採用されていることです。 C++はそれと共存しなければならないので、C++標準ライブラリはヘッダーの拡張子を持たないように進化しているかもしれません。

これらのヘッダーのいくつかは同じ名前を持っている可能性がありますが、提供する機能には似ていない場合もあります。

#include<some.h> //this includes the header C library 
#include<some> //this includes the header from the C++ standard library 
+0

が間違っています。 Cの標準ライブラリを含むC++には、 ''を使用してください。例えば、 ' '、' ' –

+0

@LưuVĩnhPhúcこれは間違っています。 cstdioはCライブラリと同等のC++であり、C標準ライブラリと同じではありません。ここで別の質問があり、最高の定格応答は私の答えと一致しているようだ:http://stackoverflow.com/questions/7673597/include-string-or-string-h –

+0

よく['stdio.h'は長い間非難されていた] (http://stackoverflow.com/a/7596439/995714)、名前空間の問題に陥るかもしれません。 http://stackoverflow.com/q/37904753/995714 –

0

OpenSceneGraphの開発者(Robert Osfield)に郵送しました。ここに彼の答えがあります。

OSGは、標準のC++ヘッダと同じヘッダ規約を採用しました。 ヘッダーに - -C++ - - 文字列を追加して、編集者が でタイプを判別できるようにしました。

関連する問題