7

重複の可能性:
#include <ファイル名> と #include “ファイル名” の違いは何ですか?

次のように記述しても、コンパイラが文句を言わないのはなぜですか。

#include "stdio.h"

そうじゃないかな

#include <stdio.h>

代わりに、stdio.h は実際には翻訳単位のフォルダーではなくライブラリ フォルダーに格納されているためですか? とにかくなぜそれが機能するのですか?

4

3 に答える 3

10

との差はあまりありません""どちらも、実装定義の場所1、2 で<>ヘッダーを検索します。違いは、 の検索が失敗した場合、 を使用しているかのように検索が行われることです。(§16.2)""<>

基本的に、これは、<>が特定の名前のヘッダーを""見つけた場合、同じ名前のヘッダーの検索に失敗しないことを意味します3


1これらの実装定義の場所は、両方の形式で同じである必要はありません。

2これらの検索ライブラリ フォルダの 1 つと、もう 1 つの検索ライブラリ フォルダが TU のフォルダを検索する必要はありません。コンパイラはファイルシステム全体を検索でき、必要に応じてグーグルで検索することもできます。

3ただし、これは常に同じヘッダーを見つけるという意味ではありません。

于 2012-12-03T13:41:06.330 に答える
1

""vs<>はルックアップの順序のみを変更します。

だから

#include "stdio.h"

プリコンパイラは、翻訳単位のディレクトリからルックアップを開始し、定義済みの「インクルード」ディレクトリに移動します

一方

#include <stdio.h>

逆か

于 2012-12-03T13:42:01.480 に答える
1

これは、インクルード構文の定義方法によるものです。

#include <cstdio>コンパイラに標準ライブラリ cstdio を含める必要があることを意味します

#include "cstdio"コンパイラは、主に現在のディレクトリを調べ、標準ライブラリの場所をフォールバックとして使用して、ファイル「cstdio」を見つけようとする必要があることを意味します。

于 2012-12-03T13:40:43.200 に答える