1

C ++がインクルードを検索するすべての場所をチェックする方法はありますか?一部のインクルードが検出され、他のインクルードが検出されない理由を理解したいと思います。

編集:プラットフォームはLinux、g++です

4

2 に答える 2

3

これはコンパイラに依存します。角かっこでヘッダーの場所を渡し、二重引用符で囲まれたヘッダーは、現在のファイルの場所をルートとするパスにあると予想されます。コンパイラーでは、これらのファイルの追加の場所を指定することもできます。

たとえば、にgccは2つのオプションがあります--Iおよび-iとして指定されたヘッダーの場所を指定するためのオプションが<header.h>あります"header.h"。指定されていない場合-I、のデフォルトの場所

 /usr/local/include
 libdir/gcc/target/version/include
 /usr/target/include
 /usr/include

ドキュメントで指定されているgccように、検索されます。

于 2013-02-17T20:04:25.557 に答える
0

16.2[cpp.include]はこれをC++用に定義します。Cの言語はほとんど同じです。

#include <header.h>実装で定義された場所のセットで、その名前の「ヘッダー」を検索します。この「ヘッダー」はファイルである必要はありません。これは、コンパイラが魔法のように知っているものである可能性があります。

#include "header.h"また、実装で定義された場所のセットを検索しますが、「header.h」という名前のファイルを検索します。その検索が失敗した場合、ディレクティブはとして扱われ#include <header.h>ます。

多くのコンパイラは、「現在のディレクトリ」を調べることによって2番目の検索を実装します。これは、コンパイラによってはコンパイラが起動されたディレクトリを意味し、他のコンパイラでは、#includeディレクティブを含むファイルが配置されているディレクトリを意味します。

一般に、ヘッダーの引用符付きフォームを使用する必要があります。アングルブラケットはファイルを必要としないため、実装で使用するために残しておく必要があります。独自のヘッダーに山かっこを使用しても機能しないわけではありませんが、テーマに反します。

于 2013-02-17T22:51:57.493 に答える