langage - Différence entre angle<> et guillemets "" tout en incluant les fichiers d'en-tête en C++?




include langage c (2)

C'est dépendant du compilateur. Cela dit, en général, l'utilisation de " priorise les en-têtes dans le répertoire de travail courant sur les en-têtes du système. <> Est généralement utilisée pour les en-têtes du système.D'après la spécification (Section 6.10.2):

Une directive de pré-traitement du formulaire

  # include <h-char-sequence> new-line

recherche une séquence d'emplacements définis par l'implémentation pour un en-tête identifié uniquement par la séquence spécifiée entre les délimiteurs < et > , et entraîne le remplacement de cette directive par l'intégralité du contenu de l'en-tête. La façon dont les lieux sont spécifiés ou l'en-tête identifié est défini par l'implémentation.

Une directive de pré-traitement du formulaire

  # include "q-char-sequence" new-line

provoque le remplacement de cette directive par tout le contenu du fichier source identifié par la séquence spécifiée entre les délimiteurs Le fichier source nommé est recherché selon une implémentation définie Si cette recherche n'est pas prise en charge ou si la recherche échoue , la directive est retraitée comme si elle était lue

  # include <h-char-sequence> new-line

avec la séquence contenue identique (y compris > caractères, le cas échéant) de la directive d'origine.

Ainsi, sur la plupart des compilateurs, l'utilisation de "" vérifie d'abord votre répertoire local, et s'il ne trouve pas de correspondance, il se déplace pour vérifier les chemins du système. L'utilisation de <> lance la recherche avec les en-têtes du système.

Dupliquer possible:
Quelle est la différence entre #include <filename> et #include "filename"?

Quelle est la différence entre les angles < > et les doubles guillemets " " tout en incluant les fichiers d'en-tête en C ++?

Je veux dire quels fichiers sont censés être inclus en utilisant par exemple: #include <QPushButton> et quels fichiers doivent être inclus en utilisant par exemple: #include "MyFile.h" ???


Lorsque vous utilisez des crochets, le compilateur recherche le fichier dans la liste des chemins d'inclusion. Lorsque vous utilisez des guillemets, il recherche d'abord le répertoire courant (c'est-à-dire le répertoire où se trouve le module en cours de compilation) et seulement ensuite il va chercher dans la liste des chemins d'inclusion.

Ainsi, par convention, vous utilisez les chevrons pour les inclusions standard et les doubles guillemets pour tout le reste. Cela garantit que dans le cas (non recommandé) dans lequel vous avez un en-tête local avec le même nom qu'un en-tête standard, le bon sera choisi dans chaque cas.





c++11