Quelle est la différence entre #include <> et #include " " en C/C++

Dans les langages de programmation C et C++, quelle est la différence entre l’utilisation de guillemets "" et l’utilisation de crochets <> dans l’instruction include, comme suit ?

#include <filename>
#include "filename"

En pratique, la différence réside dans l’emplacement où le préprocesseur recherche le fichier inclus.

Pour #include <filename>, le préprocesseur cherche d’une manière dépendante de l’implémentation, normalement dans des répertoires prédésignés par le compilateur/IDE. Cette méthode est normalement utilisée pour inclure les fichiers d’en-tête de la bibliothèque standard.

Pour #include "filename", le préprocesseur cherche d’abord dans le même répertoire que le fichier contenant la directive, puis suit le chemin de recherche utilisé pour la forme #include "filename". Cette méthode est normalement utilisée pour inclure des fichiers d’en-tête définis par le programmeur.

Pour #include "filename" le compilateur recherche normalement le dossier du fichier qui contient cette inclusion et ensuite les autres dossiers. Pour #include <filename> le compilateur ne cherche pas dans le dossier du fichier courant.

Lorsque vous utilisez #include <filename>, le pré-processeur cherche le fichier dans le répertoire des fichiers d’en-tête C\C++ (stdio.h\cstdio, string, vector, etc.). Mais, lorsque vous utilisez #include "filename" en premier, le pré-processeur cherche le fichier dans le répertoire courant, et s’il ne s’y trouve pas - le pré-processeur le cherchera dans le répertoire des fichiers d’en-tête C\C++.