web-dev-qa-db-fra.com

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

Duplicate possible:
Quelle est la différence entre #include <nom du fichier> et #include “nom du fichier”?

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

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

226
Sulla

Cela dépend du compilateur. Cela dit, en général, " donne la priorité aux en-têtes du répertoire de travail actuel par rapport aux en-têtes du système. <> est généralement utilisé pour les en-têtes du système. De à la spécification (Section 6.10.2):

Une directive de prétraitement de la forme

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

recherche dans une séquence d'emplacements définis par l'implémentation un en-tête identifié uniquement par la séquence spécifiée entre les délimiteurs < et > et provoque le remplacement de cette directive par le contenu entier de l'en-tête. La manière dont les espaces sont spécifiés ou l'en-tête identifié est définie par l'implémentation.

Une directive de prétraitement de la forme

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

provoque le remplacement de cette directive par l'intégralité du contenu du fichier source identifié par la séquence spécifiée entre les délimiteurs ". Le fichier source nommé est recherché d'une manière définie par l'implémentation. Si cette recherche n'est pas prise en charge ou si la recherche échoue, la directive est traitée à nouveau 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, la plupart compilateurs, en utilisant le "", vérifie d’abord votre répertoire local. S'il ne trouve pas de correspondance, il vérifie ensuite les chemins du système. Utiliser <> lance la recherche avec les en-têtes du système.

240
Carl Norum

Lorsque vous utilisez des crochets angulaires, le compilateur recherche le fichier dans la liste des chemins d'inclusion. Lorsque vous utilisez des guillemets doubles, il commence par rechercher le répertoire en cours (c’est-à-dire le répertoire dans lequel se trouve le module compilé), puis seulement dans la liste des chemins d’inclusion.

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

44
Fabio Ceconello