次のように記述しても、コンパイラが文句を言わないのはなぜですか。
#include "stdio.h"
そうじゃないかな
#include <stdio.h>
代わりに、stdio.h は実際には翻訳単位のフォルダーではなくライブラリ フォルダーに格納されているためですか? とにかくなぜそれが機能するのですか?
次のように記述しても、コンパイラが文句を言わないのはなぜですか。
#include "stdio.h"
そうじゃないかな
#include <stdio.h>
代わりに、stdio.h は実際には翻訳単位のフォルダーではなくライブラリ フォルダーに格納されているためですか? とにかくなぜそれが機能するのですか?
との差はあまりありません""
。どちらも、実装定義の場所1、2 で<>
ヘッダーを検索します。違いは、 の検索が失敗した場合、 を使用しているかのように検索が行われることです。(§16.2)""
<>
基本的に、これは、<>
が特定の名前のヘッダーを""
見つけた場合、同じ名前のヘッダーの検索に失敗しないことを意味します3。
1これらの実装定義の場所は、両方の形式で同じである必要はありません。
2これらの検索ライブラリ フォルダの 1 つと、もう 1 つの検索ライブラリ フォルダが TU のフォルダを検索する必要はありません。コンパイラはファイルシステム全体を検索でき、必要に応じてグーグルで検索することもできます。
3ただし、これは常に同じヘッダーを見つけるという意味ではありません。
""
vs<>
はルックアップの順序のみを変更します。
だから
#include "stdio.h"
プリコンパイラは、翻訳単位のディレクトリからルックアップを開始し、定義済みの「インクルード」ディレクトリに移動します
一方
#include <stdio.h>
逆か
これは、インクルード構文の定義方法によるものです。
#include <cstdio>
コンパイラに標準ライブラリ cstdio を含める必要があることを意味します
#include "cstdio"
コンパイラは、主に現在のディレクトリを調べ、標準ライブラリの場所をフォールバックとして使用して、ファイル「cstdio」を見つけようとする必要があることを意味します。