2009-06-04 11 views
0

私はUbuntuでg ++を使用しています。ヘッダーファイルはすべて、従来の.hの代わりに.Hで終わるようになっています。.hとg ++の.Hヘッダファイル

私はむしろインクルードディレクトリを変更したくないです。そうしないと、ヘッダーの.hバージョンへのシンボリックリンクを作成するだけです。

g ++が自動的に.Hと.hファイルが同じであるため、私のプログラムでheader.hまたはheader.Hのどちらかを書くことができるという簡単な方法があるのでしょうか?私はg ++のマニュアルページを見てきましたが、このような機能をサポートしているかどうかはわかりません。

+0

GCCはヘッダの名前に気を付けません。それらは拡張子を全く持たないか、.txtや.cや.somethingという名前で完全に無関係で、#includeは動作します。 – ephemient

答えて

2

これはLinuxファイルシステムの実装の詳細だと思います。 Windowsの.hと.Hファイルは事実上同じですが、Linuxではtraditional.hとtraditional.Hを同じディレクトリに置くことができます。

あなたが正しく理解している場合は、ヘッダーを含むファイルに大文字のHを指定する必要があります。

3

この問題は、ファイルシステムに起因しています。ファイルシステムでは大文字と小文字が区別されるため、header.hとheader.Hの違いが分かります。これはg ++の問題ではありません。大文字と小文字を区別しないファイルシステム/ OS上で実行すると、win32システムでg ++を実行している場合と同様に、この問題は表示されません。

7

.Hは、CヘッダーファイルがCヘッダーファイル(.hppまたは.hxx)とは区別される方法の1つです。これは、機密性の高いOSでのみ機能します。

ファイルは.Hを持っている場合は、ヘッダファイルの名前を変更したり、ソースの#include .Hファイルを持ってしたくない場合は、単に#include <file.H>

2

、あなただけの.hファイルのセットを作成することができますが#対応する.Hファイルをインクルードします。

2

私はあなたがあなたの歯をグリットと

#include "foo.H" 

などの代替ソリューションを使用する必要がある場合がありますので、gccは大文字と小文字を区別しないになることを取得する簡単な方法を考える...または一部を作成することはできませんシンボリックリンク:

# create .h links to all .H files below the current dir 
for basename in `find . -name *.H | sed 's/\(.*\)\..*/\1/'`; do 
    ln -s $basename.H $basename.h 
done 

FYI、a recent thread on the gcc mailing list requesting case-insensitivityです。応答は主に効率に関係しています。コンパイラに "foo.h"( "FOO.H"、 "Foo.H"、 "foo.H"など)のすべてのバージョンを探すように頼むと、ディスクに頻繁にアクセスする必要があります。誰がビルド時間を長くする必要がありますか? :)

関連する問題